[{"data":1,"prerenderedAt":25},["ShallowReactive",2],{"blog-content-zh-what-is-a-smart-contract":3},{"slug":4,"title":5,"excerpt":6,"description":7,"bodyHtml":8,"faqItems":9},"what-is-a-smart-contract","什么是智能合约？移动资金的那段代码","智能合约是部署在区块链上的一段程序，它按固定规则持有并转移资金，由网络上的每个节点验证执行，中间没有任何人。以下讲解它们在 EVM、Solana 和 TON 上的运作方式、何时可以被更改、漏洞为何会造成真金白银的损失——以及 WATS 热钱包如何用一份 ERC-4337 paymaster 合约把手续费统一以一种代币计费。","智能合约详解：持有并转移资金的确定性链上代码、EVM 与 Solana 与 TON 的模型差异、作为合约的代币、可升级代理、审计的局限，以及 WATS 热钱包的 ERC-4337 paymaster 如何把每一笔手续费都以 ATS 计费，而不是各链的原生 gas。","\u003Cblockquote>\u003Cp>\u003Cstrong>智能合约\u003C\u002Fstrong>是部署在区块链上的一段程序，它按固定规则持有并转移资金，以确定性方式执行——相同的输入总是产生相同的结果——同时网络上的每个节点都会验证这次执行，中间没有任何公司或经办人。你在链上做的几乎每一件事都是智能合约：代币、兑换、借贷市场，以及那些允许某个协议动用你余额的授权。因为交易对手\u003Cem>就是\u003C\u002Fem>代码本身，它无法被说服，也无处申诉，这也正是一个缺陷带来的是被掏空的金库，而不是一张工单。EVM 链把它们叫作智能合约，Solana 称之为程序，TON 甚至把你的钱包也建模成一份合约，但机制在哪里都是一样的。钱包同样构建在它们之上：\u003Ca href=\"\u002Fhot-wallet\">WATS 热钱包\u003C\u002Fa>在 EVM 链上使用一份 ERC-4337 paymaster 合约，在 Solana 和 TON 上使用等价的 fee-payer，因此每一笔手续费都以单一代币 ATS 计费，而不是各条链的原生 gas 币。\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>移动资金的那段代码\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>智能合约\u003C\u002Fstrong>是部署在区块链上的一段程序，它按固定规则持有并转移资金。一经部署，它便以确定性方式执行——相同的输入总是产生相同的结果——并且网络上的每个节点都会验证这次执行，中间没有任何公司或经办人。代币、兑换和借贷市场全都是智能合约：代码本身就是交易对手。\u003C\u002Fp>\n\u003Cp>最后这句话才是要害。当你使用银行时，是一家机构欠你什么，并且有一套法律体系为这项主张背书。当你使用智能合约时，代码就是协议的全部——它无法被说服，也无处申诉。正是这一属性让 \u003Ca href=\"\u002Fblog\u002Fwhat-is-web3\">Web3\u003C\u002Fa> 成为可能，也正是它让 Web3 的失败如此不留情面。\u003C\u002Fp>\n\n\u003Ch2>自动售货机——诚实的版本\u003C\u002Fh2>\n\u003Cp>经典的类比说，智能合约就是一台自动售货机：投币，拿到零食，不需要店员。规则\u003Cem>就是\u003C\u002Fem>服务本身。这部分是准确的，而且很好地抓住了确定性——机器不能决定它今天不喜欢你。\u003C\u002Fp>\n\u003Cp>而这个类比藏起了什么。任何人都可以摆出一台机器，在它开始收币之前也没有任何检查员来查验——一份合约可能从第一天起就是错的，或者是刻意怀有恶意的。这台机器还装着真金白银：资金池和借贷市场把用户资金保管在合约自身之内，因此一个缺陷带来的不是卡住的零食，而是被掏空的金库。而且与自动售货机不同，合约之间会互相调用。这种可组合性是 \u003Ca href=\"\u002Fblog\u002Fwhat-is-defi\">DeFi\u003C\u002Fa> 背后的超能力——也意味着一台坏掉的机器可以把与它接线相连的每一台机器一起拖垮。\u003C\u002Fp>\n\n\u003Ch2>你每天都在与什么打交道？\u003C\u002Fh2>\n\u003Cp>只要你用过加密货币，你就用过智能合约——而且通常每笔交易要用到好几份：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>代币是合约。\u003C\u002Fstrong>ERC-20 的“余额”并不是躺在你钱包里的一枚枚币；它是代币合约内部账本上的一条记录，一张从地址到金额的映射表。发送代币，就是请那份合约更新两条记录。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>兑换是合约。\u003C\u002Fstrong>一个 DEX 资金池是一份持有两种代币、并按公式为交易定价的合约——没有订单簿，对面也没有交易台。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>授权是你在配置一份合约。\u003C\u002Fstrong>在 DEX 能动用你的代币之前，你要告诉代币合约它最多可以取走多少——这是一条记录在链上的 allowance。由于这项许可比那笔交易本身活得更久，它值得被弄清楚；\u003Ca href=\"\u002Fblog\u002Ftoken-approvals-and-permit-explained\">代币授权与 Permit\u003C\u002Fa> 讲的正是你到底授出了什么。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>在某些链上，连你的钱包本身都是一份合约——这就引出了几大生态之间的差异。\u003C\u002Fp>\n\n\u003Ch2>EVM、Solana 和 TON 的合约有何不同？\u003C\u002Fh2>\n\u003Cp>理念在哪里都一样——由网络验证的确定性代码——但架构上的差异，作为用户你是能感觉到的。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\u003Ctr>\u003Cth>\u003C\u002Fth>\u003Cth>EVM 链\u003C\u002Fth>\u003Cth>Solana\u003C\u002Fth>\u003Cth>TON\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Cth>常用称呼\u003C\u002Fth>\u003Ctd>智能合约\u003C\u002Ftd>\u003Ctd>程序\u003C\u002Ftd>\u003Ctd>合约（actor）\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>状态存放在哪里\u003C\u002Fth>\u003Ctd>代码与存储同处一个地址\u003C\u002Ftd>\u003Ctd>代码在程序里；状态在单独的账户中，每笔交易都要把它们传入\u003C\u002Ftd>\u003Ctd>每份合约持有自己的状态，并通过异步消息与其他合约通信\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>代币模型\u003C\u002Fth>\u003Ctd>一份 ERC-20 合约记录每个持有者的余额\u003C\u002Ftd>\u003Ctd>SPL 代币程序管理按持有者划分的代币账户\u003C\u002Ftd>\u003Ctd>每个持有者的 jetton 余额存放在各自的小型子合约中\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>默认可升级吗？\u003C\u002Fth>\u003Ctd>否——除非使用代理，否则字节码不可变\u003C\u002Ftd>\u003Ctd>是——直到升级权限被撤销为止\u003C\u002Ftd>\u003Ctd>只有当合约自身的代码允许时才可以\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>TON 把这个模型推得最远：链上的一切，包括你的钱包，都是一份在与其他合约互发消息的合约。\u003C\u002Fp>\n\n\u003Ch2>智能合约部署之后还能被更改吗？\u003C\u002Fh2>\n\u003Cp>在 EVM 链上，已部署的字节码本身是无法编辑的。但你打交道的许多东西都坐落在一层\u003Cstrong>代理\u003C\u002Fstrong>之后：你调用一个固定地址，它把每一次调用转发给一份独立的实现合约——而管理员可以把代理指向新的代码。你的地址保持不变；它背后的规则却不必。\u003C\u002Fp>\n\u003Cp>所以“不可变”其实是一个关于密钥的问题。谁握着升级权限——一个由团队成员组成的多签、一个强制公开延迟期的时间锁、一次治理投票，还是根本没有人，因为权限已被销毁、代码就此定稿？两种答案都不会自动正确：可升级性让团队能够修补漏洞，同时也意味着这份协议可能在你脚下改变。实践中，许多大型协议处在中间地带——可升级，但要经过时间锁和多签。\u003C\u002Fp>\n\n\u003Ch2>智能合约的漏洞为什么如此要命？\u003C\u002Fh2>\n\u003Cp>因为代码就是交易对手，一个漏洞不是一张工单——而是一扇后面堆着钱的敞开的门。没有防欺诈部门来撤回这笔转账，而且在大多数链上，也没有谁有权力在门开着的时候把现实按下暂停。\u003C\u002Fp>\n\u003Cp>这种模式和这项技术本身一样古老。2016 年，以太坊早期的投资合约 The DAO 中的一个重入漏洞，让攻击者抽走了其中很大一部分资金，后果严重到以太坊为撤销此事进行了硬分叉，并在此过程中分裂出 Ethereum Classic。跨链桥合约为整个生态托管着被锁定的代币，出于同样的根本原因，它们造成了加密史上一些最大的损失：庞大的价值，仅由代码看守。\u003C\u002Fp>\n\n\u003Ch2>审计能让一份合约变得安全吗？\u003C\u002Fh2>\n\u003Cp>更安全——而不是安全。审计是安全工程师针对某一时点上的某一个代码版本所做的付费评审。它能发现已知的漏洞类型和草率的写法；但它并不能证明代码正确，不涵盖日后的升级，也无法预料这份合约与审计师从未见过的协议组合在一起时会如何表现。经过良好审计的协议照样被攻破过。\u003C\u002Fp>\n\u003Cp>对用户来说务实的读法是：优先选择既经过审计\u003Cem>又\u003C\u002Fem>经受住时间与资金规模检验的合约，把未经审计的新合约当作实验，把代币授权保持在最小范围，并且绝不存入超过对方代码所配得上的金额。\u003C\u002Fp>\n\n\u003Ch2>WATS 处在什么位置\u003C\u002Fh2>\n\u003Cp>在 \u003Ca href=\"\u002Fhot-wallet\">WATS 热钱包\u003C\u002Fa>里，智能合约这套轨道本身就是手续费模型：你签署的每一笔交易——一次转账、一次合约调用——都以单一代币 ATS 计费，而不是链的原生 gas，在 EVM 上通过一个 ERC-4337 paymaster，在 Solana 和 TON 上通过等价的 fee-payer\u002Frelayer 完成。ATS 是一枚 LayerZero OFT，因此一份余额即可在 EVM、Solana 和 TON 上通用，而收取的 ATS 会从 100M 朝着 30M 的下限被销毁。它始终保持非托管——私钥由你持有，WATS 从不持有任何私钥——而且 WATS 是首个且唯一将 ERC-4337 + OFT 单一代币手续费（以其取代原生 gas）与那样的销毁机制相结合的钱包。\u003C\u002Fp>\n\u003Cp>智能合约并不是加密世界里一个偏门的角落——你每次转移一枚代币时签下的就是它，而另一端的代码，是你的资金与写下它的人之间唯一的屏障。有两件事始终在你的掌控之中：你授权了什么，以及你的私钥放在哪里。在授出\u003Ca href=\"\u002Fblog\u002Ftoken-approvals-and-permit-explained\">授权\u003C\u002Fa>之前先审视一遍，并按代码配得上的程度来决定每一笔存入的规模——然后把密钥这一侧留在自己手里，从一个无法代你转移资金的钱包中签名。\u003Ca href=\"\u002Fhot-wallet\">WATS 热钱包\u003C\u002Fa>在它覆盖的全部八条链上——以太坊、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 和 TON——正是这样：私钥由用户持有，WATS 从不持有任何私钥；而手续费这一侧运行的正是本文所描述的同一项技术：一份以 ATS 计费、取代各链原生 gas 的 ERC-4337 paymaster 合约。\u003C\u002Fp>",[10,13,16,19,22],{"q":11,"a":12},"代币真的是智能合约吗？","是的。在 EVM 链上，一枚 ERC-20 代币就是一份合约，它的存储把地址映射到余额——你的代币是那本账本里的记录，而不是躺在钱包中的物件。在 Solana 上，SPL 代币程序管理按持有者划分的代币账户；在 TON 上，每个持有者的 jetton 余额存放在各自的小型子合约中。无论哪种情形，转移代币都意味着请一份程序更新它的记录。",{"q":14,"a":15},"智能合约部署之后还能被更改吗？","有时可以。在 EVM 链上，已部署的字节码是不可变的，但许多项目使用代理：用户调用一个固定地址，它转发给一份管理员可以替换的实现合约。Solana 的程序默认可升级，直到升级权限被撤销为止。所以真正的问题是谁掌握升级密钥——一个多签、一个时间锁、一次治理投票，还是根本没有人。在相信任何“不可变”的说法之前，先把这一点查清楚。",{"q":17,"a":18},"经过审计的智能合约用起来安全吗？","更安全，但不是安全。审计是对某一时点上某一个代码版本的评审；它能发现已知的漏洞类型，但并不能证明代码正确，不涵盖日后的升级，也不会测试与其他协议的每一种交互。经过良好审计的合约照样被攻破过。请把审计当作若干信号之一——与它在生产环境中运行的时间、所保护的资金规模，以及管理员密钥握有多大权力一并权衡——并据此决定你的敞口大小。",{"q":20,"a":21},"与智能合约交互需要该链的原生币吗？","通常需要——网络以自己的币结算 gas，所以一个 ETH 余额为零的钱包，无论持有什么代币，都无法调用一份以太坊合约。而 paymaster 本身就是一份智能合约，它改变了这一点，WATS 热钱包就是一个具体例子：它在以太坊、Arbitrum、Optimism、Base、Polygon 和 BNB Chain 上使用 ERC-4337 paymaster，在 Solana 和 TON 上使用等价的 fee-payer，因此每一笔手续费都以单一代币 ATS 计费，而网络在底层仍然收到它的原生 gas。由于 ATS 是一枚 LayerZero OFT，一份余额即可覆盖全部八条链，因此不必再为每条链单独维护 gas 备用金。这并不是折扣——区块空间的成本一分不少，变的只是支付它的代币。",{"q":23,"a":24},"使用智能合约是否意味着放弃对自己资金的掌控？","不会。调用一份合约，是你用自己的私钥签署一条指令，而合约能做的永远不会超出这次签名以及你此前授出的代币授权所允许的范围——这也正是把授权保持在最小范围比任何审计徽章都更重要的原因。最要紧的是私钥仍然属于你：WATS 热钱包完全非托管，私钥由用户持有，WATS 从不持有任何私钥；WATS NFC Metal Card 同样不存储任何私钥——它只是碰一碰，为存放在 WATS 应用中的密钥完成身份验证。你真正承担的风险，是那份合约的代码和你授予它的额度，而不是你用来签名的钱包。",1786059412626]