38 lines
44 KiB
HTML
38 lines
44 KiB
HTML
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" /><meta name="generator" content="VuePress 2.0.0-rc.26" /><meta name="theme" content="VuePress Theme Plume 1.0.0-rc.192" /><script id="check-mac-os">document.documentElement.classList.toggle('mac', /Mac|iPhone|iPod|iPad/i.test(navigator.platform))</script><script id="check-dark-mode">;(function () {const um= localStorage.getItem('vuepress-theme-appearance') || 'auto';const sm = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;const isDark = um === 'dark' || (um !== 'light' && sm);document.documentElement.dataset.theme = isDark ? 'dark' : 'light';})();</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"一些没分类的小知识","image":[""],"dateModified":"2026-01-09T02:03:40.000Z","author":[]}</script><meta property="og:url" content="https://www.simengweb.com/programming/solidity/other/miscellaneous/"><meta property="og:site_name" content="仲夏夜之梦"><meta property="og:title" content="一些没分类的小知识"><meta property="og:description" content="关于 memory 和 storage 存储类型 storage:合约的持久化状态数据,保存在链上状态。对 storage 的写入最昂贵,读取也比内存贵;修改会永久生效。 memory:函数调用期间的临时数据,函数返回后即释放。对 memory 的更改不会持久化。 (补充)calldata:外部函数参数的只读数据位置,零拷贝、不可修改,用于节省 gas..."><meta property="og:type" content="article"><meta property="og:locale" content="zh-CN"><meta property="og:updated_time" content="2026-01-09T02:03:40.000Z"><meta property="article:modified_time" content="2026-01-09T02:03:40.000Z"><link rel="icon" type="image/png" href="https://theme-plume.vuejs.press/favicon-32x32.png"><title>一些没分类的小知识 | Solidity | 仲夏夜之梦</title><meta name="description" content="关于 memory 和 storage 存储类型 storage:合约的持久化状态数据,保存在链上状态。对 storage 的写入最昂贵,读取也比内存贵;修改会永久生效。 memory:函数调用期间的临时数据,函数返回后即释放。对 memory 的更改不会持久化。 (补充)calldata:外部函数参数的只读数据位置,零拷贝、不可修改,用于节省 gas..."><link rel="preload" href="/assets/style-BIsJluQH.css" as="style"><link rel="stylesheet" href="/assets/style-BIsJluQH.css"><link rel="modulepreload" href="/assets/app-DTJ1dk4L.js"><link rel="modulepreload" href="/assets/index.html-29C7tOtK.js"></head><body><div id="app"><!--[--><!--[--><div class="theme-plume vp-layout" vp-container data-v-3835cfce><!--[--><!--[--><!--]--><!--[--><span tabindex="-1" data-v-17e3d305></span><a href="#VPContent" class="vp-skip-link visually-hidden" data-v-17e3d305> Skip to content </a><!--]--><!----><header class="vp-nav" data-v-3835cfce data-v-59eaa6de><div class="vp-navbar" vp-navbar data-v-59eaa6de data-v-84e02ed1><div class="wrapper" data-v-84e02ed1><div class="container" data-v-84e02ed1><div class="title" data-v-84e02ed1><div class="vp-navbar-title has-sidebar" data-v-84e02ed1 data-v-111dde2d><a class="vp-link link no-icon title" href="/" data-v-111dde2d><!--[--><!--[--><!--]--><!--[--><!--[--><!--[--><img class="vp-image dark logo" style="" src="/plume.svg" alt data-v-b173f822><!--]--><!--[--><img class="vp-image light logo" style="" src="/plume.svg" alt data-v-b173f822><!--]--><!--]--><!--]--><span data-v-111dde2d>仲夏夜之梦</span><!--[--><!--]--><!--]--></a></div></div><div class="content" data-v-84e02ed1><div class="content-body" data-v-84e02ed1><!--[--><!--]--><div class="vp-navbar-search search" data-v-84e02ed1><div class="search-wrapper" data-v-97535d1e><!----><div id="local-search" data-v-97535d1e><button type="button" class="mini-search mini-search-button" aria-label="搜索文档" data-v-97535d1e><span class="mini-search-button-container"><span class="mini-search-search-icon vpi-mini-search" aria-label="search icon"></span><span class="mini-search-button-placeholder">搜索文档</span></span><span class="mini-search-button-keys"><kbd class="mini-search-button-key"></kbd><kbd class="mini-search-button-key">K</kbd></span></button></div></div></div><!--[--><!--]--><nav aria-labelledby="main-nav-aria-label" class="vp-navbar-menu menu" data-v-84e02ed1 data-v-d43c1732><span id="main-nav-aria-label" class="visually-hidden" data-v-d43c1732>Main Navigation</span><!--[--><!--[--><a class="vp-link link navbar-menu-link" href="/" tabindex="0" data-v-d43c1732 data-v-d1bfac4a><!--[--><!----><span data-v-d1bfac4a>首页</span><!----><!--]--></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/blog/" tabindex="0" data-v-d43c1732 data-v-d1bfac4a><!--[--><!----><span data-v-d1bfac4a>博客</span><!----><!--]--></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/ai/" tabindex="0" data-v-d43c1732 data-v-d1bfac4a><!--[--><!----><span data-v-d1bfac4a>模型</span><!----><!--]--></a><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-d43c1732 data-v-2f9dd7ad><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-2f9dd7ad><span class="text" data-v-2f9dd7ad><!----><!----><span data-v-2f9dd7ad>学科知识</span><!----><span class="vpi-chevron-down text-icon" data-v-2f9dd7ad></span></span></button><div class="menu" data-v-2f9dd7ad><div class="vp-menu" data-v-2f9dd7ad data-v-ce500c40><div class="items" data-v-ce500c40><!--[--><!--[--><div class="vp-menu-link" data-v-ce500c40 data-v-4cd00159><a class="vp-link link" href="/subject/english/" data-v-4cd00159><!--[--><!----> 英语学习笔记 <!----><!--]--></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-ce500c40 data-v-4cd00159><a class="vp-link link" href="/subject/certification/" data-v-4cd00159><!--[--><!----> 系统分析师 <!----><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-d43c1732 data-v-2f9dd7ad><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-2f9dd7ad><span class="text" data-v-2f9dd7ad><!----><!----><span data-v-2f9dd7ad>编程笔记</span><!----><span class="vpi-chevron-down text-icon" data-v-2f9dd7ad></span></span></button><div class="menu" data-v-2f9dd7ad><div class="vp-menu" data-v-2f9dd7ad data-v-ce500c40><div class="items" data-v-ce500c40><!--[--><!--[--><div class="vp-menu-link" data-v-ce500c40 data-v-4cd00159><a class="vp-link link" href="/programming/solidity/" data-v-4cd00159><!--[--><!----> Solidity <!----><!--]--></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-ce500c40 data-v-4cd00159><a class="vp-link link" href="/programming/web/" data-v-4cd00159><!--[--><!----> Web 开发 <!----><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-d43c1732 data-v-2f9dd7ad><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-2f9dd7ad><span class="text" data-v-2f9dd7ad><!----><!----><span data-v-2f9dd7ad>技术理论</span><!----><span class="vpi-chevron-down text-icon" data-v-2f9dd7ad></span></span></button><div class="menu" data-v-2f9dd7ad><div class="vp-menu" data-v-2f9dd7ad data-v-ce500c40><div class="items" data-v-ce500c40><!--[--><!--[--><div class="vp-menu-link" data-v-ce500c40 data-v-4cd00159><a class="vp-link link" href="/theory/cryptography/" data-v-4cd00159><!--[--><!----> 密码学基础 <!----><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="vp-flyout vp-navbar-menu-group" data-v-d43c1732 data-v-2f9dd7ad><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-2f9dd7ad><span class="text" data-v-2f9dd7ad><!----><!----><span data-v-2f9dd7ad>运维</span><!----><span class="vpi-chevron-down text-icon" data-v-2f9dd7ad></span></span></button><div class="menu" data-v-2f9dd7ad><div class="vp-menu" data-v-2f9dd7ad data-v-ce500c40><div class="items" data-v-ce500c40><!--[--><!--[--><div class="vp-menu-link" data-v-ce500c40 data-v-4cd00159><a class="vp-link link" href="/ops/blockchain/" data-v-4cd00159><!--[--><!----> 区块链运维 <!----><!--]--></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-ce500c40 data-v-4cd00159><a class="vp-link link" href="/ops/linux/" data-v-4cd00159><!--[--><!----> Linux 运维 <!----><!--]--></a></div><!--]--><!--[--><div class="vp-menu-link" data-v-ce500c40 data-v-4cd00159><a class="vp-link link" href="/ops/docker/" data-v-4cd00159><!--[--><!----> Docker 运维 <!----><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/tools/" tabindex="0" data-v-d43c1732 data-v-d1bfac4a><!--[--><!----><span data-v-d1bfac4a>工具</span><!----><!--]--></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/about/" tabindex="0" data-v-d43c1732 data-v-d1bfac4a><!--[--><!----><span data-v-d1bfac4a>关于</span><!----><!--]--></a><!--]--><!--[--><a class="vp-link link navbar-menu-link" href="/friends/" tabindex="0" data-v-d43c1732 data-v-d1bfac4a><!--[--><!----><span data-v-d1bfac4a>友情链接</span><!----><!--]--></a><!--]--><!--]--></nav><!--[--><!--]--><!----><div class="vp-navbar-appearance appearance" data-v-84e02ed1 data-v-a295abf6><button class="vp-switch vp-switch-appearance" type="button" role="switch" title aria-checked="false" data-v-a295abf6 data-v-936ae0f2 data-v-7eb32327><span class="check" data-v-7eb32327><span class="icon" data-v-7eb32327><!--[--><span class="vpi-sun sun" data-v-936ae0f2></span><span class="vpi-moon moon" data-v-936ae0f2></span><!--]--></span></span></button></div><div class="vp-social-links vp-navbar-social-links social-links" data-v-84e02ed1 data-v-ad52545c data-v-adbced0f><!--[--><a class="vp-social-link no-icon" href="/" aria-label="github" title="github" target="_blank" rel="noopener" data-v-adbced0f data-v-d0ffcd88><!----></a><!--]--></div><div class="vp-flyout vp-navbar-extra extra" data-v-84e02ed1 data-v-b6926b42 data-v-2f9dd7ad><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-2f9dd7ad><span class="vpi-more-horizontal icon" data-v-2f9dd7ad></span></button><div class="menu" data-v-2f9dd7ad><div class="vp-menu" data-v-2f9dd7ad data-v-ce500c40><!----><!--[--><!--[--><!----><div class="group appearance" data-v-b6926b42><div class="item appearance" data-v-b6926b42><p class="label" data-v-b6926b42>外观</p><div class="appearance-action" data-v-b6926b42><button class="vp-switch vp-switch-appearance" type="button" role="switch" title aria-checked="false" data-v-b6926b42 data-v-936ae0f2 data-v-7eb32327><span class="check" data-v-7eb32327><span class="icon" data-v-7eb32327><!--[--><span class="vpi-sun sun" data-v-936ae0f2></span><span class="vpi-moon moon" data-v-936ae0f2></span><!--]--></span></span></button></div></div></div><div class="group social" data-v-b6926b42><div class="item social-links" data-v-b6926b42><div class="vp-social-links social-links-list" data-v-b6926b42 data-v-adbced0f><!--[--><a class="vp-social-link no-icon" href="/" aria-label="github" title="github" target="_blank" rel="noopener" data-v-adbced0f data-v-d0ffcd88><!----></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="vp-navbar-hamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="nav-screen" data-v-84e02ed1 data-v-f00b45b2><span class="container" data-v-f00b45b2><span class="top" data-v-f00b45b2></span><span class="middle" data-v-f00b45b2></span><span class="bottom" data-v-f00b45b2></span></span></button></div></div></div></div><div class="divider" data-v-84e02ed1><div class="divider-line" data-v-84e02ed1></div></div></div><!----></header><div class="vp-local-nav reached-top has-sidebar" data-v-3835cfce data-v-751115e6><button class="menu" aria-expanded="false" aria-controls="SidebarNav" data-v-751115e6><span class="vpi-align-left menu-icon" data-v-751115e6></span><span class="menu-text" data-v-751115e6>Menu</span></button><div class="vp-local-nav-outline-dropdown" style="--vp-vh:0px;" data-v-751115e6 data-v-3ef393bb><!----><!----></div></div><!--[--><aside class="vp-sidebar" vp-sidebar data-v-038909d5><div class="curtain" data-v-038909d5></div><nav id="SidebarNav" class="nav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-038909d5><span id="sidebar-aria-label" class="visually-hidden" data-v-038909d5> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-6279c2df><section class="vp-sidebar-item sidebar-item level-0" data-v-6279c2df data-v-3f7a02f6><!----><div data-v-3f7a02f6 data-v-3f7a02f6><div class="items" data-v-3f7a02f6><!--[--><div class="vp-sidebar-item sidebar-item level-1 is-link" data-v-3f7a02f6 data-v-3f7a02f6><div class="item" data-v-3f7a02f6><div class="indicator" data-v-3f7a02f6></div><!----><a class="vp-link link link" href="/programming/solidity/" data-v-3f7a02f6><!--[--><p class="text" data-v-3f7a02f6><span data-v-3f7a02f6>Solidity 学习笔记</span><!----></p><!--]--></a><!----></div><!----></div><!--]--></div></div></section></div><div class="no-transition group" data-v-6279c2df><section class="vp-sidebar-item sidebar-item level-0" data-v-6279c2df data-v-3f7a02f6><div class="item" role="button" tabindex="0" data-v-3f7a02f6><div class="indicator" data-v-3f7a02f6></div><!----><h2 class="text" data-v-3f7a02f6><span data-v-3f7a02f6>基础语法</span><!----></h2><!----></div><div data-v-3f7a02f6 data-v-3f7a02f6><div class="items" data-v-3f7a02f6><!--[--><div class="vp-sidebar-item sidebar-item level-1 is-link" data-v-3f7a02f6 data-v-3f7a02f6><div class="item" data-v-3f7a02f6><div class="indicator" data-v-3f7a02f6></div><!----><a class="vp-link link link" href="/programming/solidity/basic-syntax/" data-v-3f7a02f6><!--[--><p class="text" data-v-3f7a02f6><span data-v-3f7a02f6>Solidity 基础语法与数据类型</span><!----></p><!--]--></a><!----></div><!----></div><!--]--></div></div></section></div><div class="no-transition group" data-v-6279c2df><section class="vp-sidebar-item sidebar-item level-0" data-v-6279c2df data-v-3f7a02f6><div class="item" role="button" tabindex="0" data-v-3f7a02f6><div class="indicator" data-v-3f7a02f6></div><!----><h2 class="text" data-v-3f7a02f6><span data-v-3f7a02f6>项目实例</span><!----></h2><!----></div><div data-v-3f7a02f6 data-v-3f7a02f6><div class="items" data-v-3f7a02f6><!--[--><div class="vp-sidebar-item sidebar-item level-1 is-link" data-v-3f7a02f6 data-v-3f7a02f6><div class="item" data-v-3f7a02f6><div class="indicator" data-v-3f7a02f6></div><!----><a class="vp-link link link" href="/programming/solidity/analysis/case-analysis/" data-v-3f7a02f6><!--[--><p class="text" data-v-3f7a02f6><span data-v-3f7a02f6>Solidity 代码实例</span><!----></p><!--]--></a><!----></div><!----></div><!--]--></div></div></section></div><div class="no-transition group" data-v-6279c2df><section class="vp-sidebar-item sidebar-item level-0 has-active" data-v-6279c2df data-v-3f7a02f6><div class="item" role="button" tabindex="0" data-v-3f7a02f6><div class="indicator" data-v-3f7a02f6></div><!----><h2 class="text" data-v-3f7a02f6><span data-v-3f7a02f6>杂项</span><!----></h2><!----></div><div data-v-3f7a02f6 data-v-3f7a02f6><div class="items" data-v-3f7a02f6><!--[--><div class="vp-sidebar-item sidebar-item level-1 is-link" data-v-3f7a02f6 data-v-3f7a02f6><div class="item" data-v-3f7a02f6><div class="indicator" data-v-3f7a02f6></div><!----><a class="vp-link link link" href="/programming/solidity/other/hardhat/" data-v-3f7a02f6><!--[--><p class="text" data-v-3f7a02f6><span data-v-3f7a02f6>Hardhat 相关知识</span><!----></p><!--]--></a><!----></div><!----></div><div class="vp-sidebar-item sidebar-item level-1 is-link" data-v-3f7a02f6 data-v-3f7a02f6><div class="item" data-v-3f7a02f6><div class="indicator" data-v-3f7a02f6></div><!----><a class="vp-link link link" href="/programming/solidity/other/miscellaneous/" data-v-3f7a02f6><!--[--><p class="text" data-v-3f7a02f6><span data-v-3f7a02f6>一些没分类的小知识</span><!----></p><!--]--></a><!----></div><!----></div><!--]--></div></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="vp-sidebar-control" data-v-038909d5><button type="button" class="toggle-sidebar-btn" aria-label="Toggle sidebar" data-v-038909d5><span class="vpi-sidebar-close" data-v-038909d5></span></button></div><!--]--><!--[--><div id="VPContent" vp-content class="vp-content has-sidebar" data-v-3835cfce data-v-1136ebd8><div class="vp-doc-container has-sidebar has-aside" data-v-1136ebd8 data-v-a4311ef5><!--[--><!--]--><div class="container" data-v-a4311ef5><div class="aside" vp-outline data-v-a4311ef5><div class="aside-curtain" data-v-a4311ef5></div><div class="aside-container" data-v-a4311ef5><div class="aside-content" data-v-a4311ef5><div class="vp-doc-aside" data-v-a4311ef5 data-v-5976474c><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="vp-doc-aside-outline" role="navigation" data-v-5976474c data-v-aa56eba0><div class="content" data-v-aa56eba0><div class="outline-marker" data-v-aa56eba0></div><div id="doc-outline-aria-label" aria-level="2" class="outline-title" role="heading" data-v-aa56eba0><span data-v-aa56eba0>此页内容</span><span class="vpi-print icon" data-v-aa56eba0></span></div><ul class="root" data-v-aa56eba0 data-v-4e762ff7><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-5976474c></div><!--[--><!--]--></div></div></div></div><div class="content" data-v-a4311ef5><div class="content-container" data-v-a4311ef5><!--[--><!--]--><main class="main" data-v-a4311ef5><nav class="vp-breadcrumb" data-v-a4311ef5 data-v-4c05ee02><ol vocab="https://schema.org/" typeof="BreadcrumbList" data-v-4c05ee02><!--[--><li property="itemListElement" typeof="ListItem" data-v-4c05ee02><a class="vp-link link no-icon breadcrumb" href="/" property="item" typeof="WebPage" data-v-4c05ee02><!--[-->首页<!--]--></a><span class="vpi-chevron-right" data-v-4c05ee02></span><meta property="name" content="首页" data-v-4c05ee02><meta property="position" content="1" data-v-4c05ee02></li><li property="itemListElement" typeof="ListItem" data-v-4c05ee02><a class="vp-link link no-icon breadcrumb" href="/programming/solidity/" property="item" typeof="WebPage" data-v-4c05ee02><!--[-->Solidity 学习笔记<!--]--></a><span class="vpi-chevron-right" data-v-4c05ee02></span><meta property="name" content="Solidity 学习笔记" data-v-4c05ee02><meta property="position" content="2" data-v-4c05ee02></li><li property="itemListElement" typeof="ListItem" data-v-4c05ee02><span class="vp-link no-icon breadcrumb" property="item" typeof="WebPage" data-v-4c05ee02><!--[-->杂项<!--]--></span><span class="vpi-chevron-right" data-v-4c05ee02></span><meta property="name" content="杂项" data-v-4c05ee02><meta property="position" content="3" data-v-4c05ee02></li><li property="itemListElement" typeof="ListItem" data-v-4c05ee02><a class="vp-link link no-icon breadcrumb current" href="/programming/solidity/other/miscellaneous/" property="item" typeof="WebPage" data-v-4c05ee02><!--[-->一些没分类的小知识<!--]--></a><!----><meta property="name" content="一些没分类的小知识" data-v-4c05ee02><meta property="position" content="4" data-v-4c05ee02></li><!--]--></ol></nav><!--[--><!--]--><!--[--><div class="vp-doc-title" data-v-9ebb517f><!--[--><!--]--><h1 class="page-title" data-v-9ebb517f><!----> 一些没分类的小知识 <!----></h1><!--[--><!--]--></div><div class="vp-doc-meta" data-v-9ebb517f><!--[--><!--]--><p class="reading-time" data-v-9ebb517f><span class="vpi-books icon" data-v-9ebb517f></span><span data-v-9ebb517f>约 721 字</span><span data-v-9ebb517f>大约 2 分钟</span></p><!----><!--[--><!--]--><p class="create-time" data-v-9ebb517f><span class="vpi-clock icon" data-v-9ebb517f></span><span data-v-9ebb517f>2025-10-12</span></p></div><!--]--><!--[--><!--]--><!--[--><div class="_programming_solidity_other_miscellaneous_ external-link-icon-enabled vp-doc plume-content" vp-content data-v-a4311ef5><!--[--><!--]--><div data-v-a4311ef5><h2 id="关于-memory-和-storage-存储类型" tabindex="-1"><a class="header-anchor" href="#关于-memory-和-storage-存储类型"><span>关于 memory 和 storage 存储类型</span></a></h2><ul><li><code>storage</code>:合约的持久化状态数据,保存在链上状态。对 <code>storage</code> 的写入最昂贵,读取也比内存贵;修改会永久生效。</li><li><code>memory</code>:函数调用期间的临时数据,函数返回后即释放。对 <code>memory</code> 的更改不会持久化。</li><li>(补充)<code>calldata</code>:外部函数参数的只读数据位置,零拷贝、不可修改,用于节省 gas。</li></ul><h3 id="生命周期与成本" tabindex="-1"><a class="header-anchor" href="#生命周期与成本"><span>生命周期与成本</span></a></h3><ul><li><code>storage</code> 写入昂贵、读取较贵;适合保存需要长期存在的状态。</li><li><code>memory</code> 在函数结束时释放,读取/写入相对便宜;适合临时计算与返回值。</li><li>复杂引用类型(数组、<code>struct</code>、<code>mapping</code>、<code>string</code>、<code>bytes</code>)在函数参数或局部变量处通常必须显式标注数据位置。</li></ul><h3 id="默认与必须声明" tabindex="-1"><a class="header-anchor" href="#默认与必须声明"><span>默认与必须声明</span></a></h3><ul><li>状态变量总是位于 <code>storage</code>(例如 <code>User[] public users;</code>)。</li><li>外部函数(<code>external</code>)的复杂类型参数默认是 <code>calldata</code>;内部/公共函数需要显式标注 <code>memory</code> 或 <code>storage</code>。</li><li>局部变量的复杂类型必须指定数据位置,否则编译报错。</li></ul><h3 id="拷贝与引用语义" tabindex="-1"><a class="header-anchor" href="#拷贝与引用语义"><span>拷贝与引用语义</span></a></h3><ul><li>从 <code>storage</code> 读取到 <code>memory</code> 会“复制”数据;修改 <code>memory</code> 副本不影响原始 <code>storage</code>。</li><li>使用 <code>storage</code> 局部变量可以得到对状态数据的“引用”,对其赋值会持久化。</li></ul><div class="language-solidity line-numbers-mode" data-highlighter="shiki" data-ext="solidity" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-solidity"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">pragma</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> solidity</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> ^0.8.20</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">contract</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> Users</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> struct</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> User</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> string</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> name</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> uint</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> age</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> User</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[]</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> public</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> users</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> add</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;">string</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> memory</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> name</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> uint</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> age</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> external</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> users</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">push</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">User</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">name</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> age</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">));</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // 写入 storage</span></span>
|
||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> updateName</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;">uint</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> i</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> string</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> memory</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> newName</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> external</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> User </span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">storage</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> u </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> users</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">i</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">];</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // storage 引用(指向链上状态)</span></span>
|
||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> u</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">name </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> newName</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // 修改持久化生效</span></span>
|
||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> tryUpdate</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;">uint</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> i</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> external</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> User </span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">memory</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> u </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> users</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">i</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">];</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // 从 storage 复制到 memory</span></span>
|
||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> u</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">age </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 99</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // 仅修改副本,不会影响链上状态</span></span>
|
||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="在内部函数传递-storage-引用" tabindex="-1"><a class="header-anchor" href="#在内部函数传递-storage-引用"><span>在内部函数传递 storage 引用</span></a></h3><ul><li>仅内部/私有函数可以接收 <code>storage</code> 引用参数,从而直接修改状态;外部函数参数不能是 <code>storage</code>。</li></ul><div class="language-solidity line-numbers-mode" data-highlighter="shiki" data-ext="solidity" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-solidity"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">pragma</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> solidity</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> ^0.8.20</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">contract</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> Users2</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> struct</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> User</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> string</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> name</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> uint</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> age</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> User</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[]</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> public</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> users</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> _inc</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">User</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> storage</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> u</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> internal</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> u</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">age </span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">+</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 1</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> birthday</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;">uint</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> i</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> external</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> _inc</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">users</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">i</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]);</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // 传递 storage 引用,持久化修改</span></span>
|
||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="动态-memory-数组与限制" tabindex="-1"><a class="header-anchor" href="#动态-memory-数组与限制"><span>动态 memory 数组与限制</span></a></h3><ul><li>可在 <code>memory</code> 中构造动态数组:<code>new uint[](n)</code>;适合作为返回值或临时计算。</li><li><code>mapping</code> 只能存在于 <code>storage</code>,不能在 <code>memory</code> 中创建或拷贝。</li></ul><div class="language-solidity line-numbers-mode" data-highlighter="shiki" data-ext="solidity" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-solidity"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">pragma</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> solidity</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> ^0.8.20</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">contract</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> Arrays</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> make</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;">uint</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> n</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> external</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> pure</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> returns</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> (</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;">uint</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[]</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> memory</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> a</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> a </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> new</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> uint</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">[](</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">n</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> for</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> (</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;">uint</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> i </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> i </span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"><</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> n</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> i</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">++</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> a</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">i</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> i</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="常见坑与实践建议" tabindex="-1"><a class="header-anchor" href="#常见坑与实践建议"><span>常见坑与实践建议</span></a></h3><ul><li>给 <code>storage</code> 变量整体赋值会进行深拷贝或引用变更(依据类型),要明确拷贝成本与语义。</li><li>修改 <code>memory</code> 副本不会持久化;要修改链上状态请使用 <code>storage</code> 引用。</li><li>大型 <code>string/bytes/数组</code> 在 <code>memory↔storage</code> 间复制成本高,尽量减少不必要的复制。</li><li>外部函数能用 <code>calldata</code> 的地方尽量使用(只读参数),节省 gas。</li></ul></div><!----><!----><!----><footer class="vp-doc-footer" data-v-a4311ef5 data-v-abf7cea9><!--[--><!--]--><!----><div class="contributors" aria-label="Contributors" data-v-abf7cea9><span class="contributors-label" data-v-abf7cea9>贡献者: </span><span class="contributors-info" data-v-abf7cea9><!--[--><!--[--><span class="contributor" data-v-abf7cea9>祀梦</span><!----><!--]--><!--]--></span></div><nav class="prev-next" data-v-abf7cea9><div class="pager" data-v-abf7cea9><a class="vp-link link pager-link prev" href="/programming/solidity/other/hardhat/" data-v-abf7cea9><!--[--><span class="desc" data-v-abf7cea9>上一页</span><span class="title" data-v-abf7cea9><!----><span data-v-abf7cea9>Hardhat 相关知识</span></span><!--]--></a></div><div class="pager" data-v-abf7cea9><!----></div></nav></footer></div><!--]--></main><div id="comment" class="waline-wrapper vp-comment" vp-comment darkmode="false" style="display:block;" data-v-a4311ef5><!----></div><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!--]--><button type="button" class="vp-back-to-top" aria-label="back to top" data-v-3835cfce style="display:none;" data-v-bcf8d9a6><span class="percent" data-allow-mismatch data-v-bcf8d9a6>0%</span><span class="show icon vpi-back-to-top" data-v-bcf8d9a6></span><svg aria-hidden="true" data-v-bcf8d9a6><circle cx="50%" cy="50%" data-allow-mismatch style="stroke-dasharray:calc(0% - 12.566370614359172px) calc(314.1592653589793% - 12.566370614359172px);" data-v-bcf8d9a6></circle></svg></button><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" aria-label="sign down" class="vp-sign-down" aria-hidden="true" data-v-3835cfce style="display:none;" data-v-3df7872a><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" data-v-3df7872a><path d="m19 11l-7 6l-7-6" data-v-3df7872a></path><path d="m19 5l-7 6l-7-6" opacity="0.6" data-v-3df7872a></path></g></svg><footer class="vp-footer has-sidebar" vp-footer data-v-3835cfce data-v-91d1c8f3><!--[--><div class="container" data-v-91d1c8f3><div class="message" data-v-91d1c8f3>愿每一份温柔都被世界珍藏 ✨</div><div class="copyright" data-v-91d1c8f3><a href="https://beian.miit.gov.cn/" target="_blank" aria-label="gongan filing address">沪ICP备2023010022号-1</a>©2025祀梦的个人博客</div></div><!--]--></footer><!--[--><!--]--><!--]--></div><!----><!--]--><!--[--><!--]--><!--]--></div><script type="module" src="/assets/app-DTJ1dk4L.js" defer></script></body></html> |