跳转至主要内容

帮助更新此页面

🌏

本页面有新版本,但现在只有英文版。请帮助我们翻译最新版本。

翻译页面
查看英文

没有错误!🐛

此页面未翻译,因此特意以英文显示。

智能合约简介

上次编辑: , Invalid DateTime
编辑页面

什么是智能合约?

智能合约只是一个运行在以太坊链上的一个程序。 它是位于以太坊区块链上一个特定地址的一系列代码(函数)和数据(状态)。

智能合约也是一个以太坊帐户,我们称之为合约帐户。 这意味着它们有余额,可以成为交易的对象。 但是,他们无法被人操控,他们是被部署在网络上作为程序运行着。 个人用户可以通过提交交易执行智能合约的某一个函数来与智能合约进行交互。 智能合约能像常规合约一样定义规则,并通过代码自动强制执行。 默认情况下,您无法删除智能合约,与它们的交互是不可逆的。

前置要求

如果您刚刚入门或寻找技术含量较低的介绍,我们推荐我们的智能合约简介

确保在您已深入了解帐户交易以太坊虚拟机,然后再开始学习智能合约。

数字自动售货机

也许对于智能合约最恰当的比喻是自动售货机,就像 Nick Szabo 描述的那样。 有了正确的投入,就保证了某些产出。

要从售货机中获取零食:

1money + snack selection = snack dispensed
2

这种逻辑以程序的形式写入自动售货机。

像自动售货机一样,智能合约也有逻辑编程到其中。 这里有一个简单的例子,说明了如果售货机是一个用 Solidity 编写的智能合约将会是什么样子:

1pragma solidity 0.8.7;
2
3contract VendingMachine {
4
5 // Declare state variables of the contract
6 address public owner;
7 mapping (address => uint) public cupcakeBalances;
8
9 // When 'VendingMachine' contract is deployed:
10 // 1. set the deploying address as the owner of the contract
11 // 2. set the deployed smart contract's cupcake balance to 100
12 constructor() {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // Allow the owner to increase the smart contract's cupcake balance
18 function refill(uint amount) public {
19 require(msg.sender == owner, "Only the owner can refill.");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // Allow anyone to purchase cupcakes
24 function purchase(uint amount) public payable {
25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
27 cupcakeBalances[address(this)] -= amount;
28 cupcakeBalances[msg.sender] += amount;
29 }
30}
31
显示全部
📋 复制

就像自动售货机让厂商不再需要员工一样,智能合约可以在许多行业中取代中间人。

无需准入性

任何人都可以编写智能合约并将其部署到区块链网络上。 您只需要学习如何用智能合约语言编码,并有足够的以太币来部署您的合约。 部署智能合约在技术上是一笔交易,因此就像你需要为简单的以太币转账支付燃料费一样,你也需要为部署智能合约支付燃料费。 但是,合约部署的燃料成本要高得多。

以太坊提供了对开发者友好的智能合约编程语言:

  • Solidity
  • Vyper

关于语言的更多信息

然而,智能合约必须要先编译才能部署,以便以太坊虚拟机可以解释并存储它们。 关于编译的更多信息

可组合性

智能合约在以太坊上公开,并且可以看成开放应用程序接口。 这意味着你可以在自己的智能合约中调用其他智能合约,以大幅扩展可能的功能。 合约甚至可以部署其他合约。

了解关于智能合约可组合性的更多信息。

局限性

智能合约本身无法获取关于“真实世界”事件的信息,因为它们无法发送 HTTP 请求。 这是设计使然。 因为依赖外部信息可能会影响共识,而共识对安全性和去中心化而言十分重要。

这可以通过预言机来规避。

智能合约的另一个限制是最大合约大小。 智能合约最大可达 24 KB,否则会消耗完燃料。 可以使用钻石模式来规避它。

多重签名合约

多重签名合约是需要多个有效签名才能执行交易的智能合约帐户。 这对于避免持有大量以太币或其他代币的合约出现单点故障非常有用。 多重签名还可以在多方之间划分合同执行和密钥管理的责任,并防止丢失单个私钥导致不可逆转的资金损失。 由于这些原因,多重签名合约可用于简单的去中心化自治组织治理。 多重签名需要 M 个可能的可接受签名中的 N 个签名才能执行(其中 N ≤ M,并且 M > 1)。 普遍使用 N = 3, M = 5N = 4, M = 7。 4/7 多重签名需要七个可能的有效签名中的四个。 这意味着即使失去了三个签名,资金仍然可以收回。 在这种情况下,这也意味着必须得到大多数密钥持有人的同意和签名才能执行合约。

智能合约资源

OpenZeppelin 合约** - 安全智能合约开发库。**

DappSys - **安全、简单、灵活的智能合约构造块。**

延伸阅读

本文对您有帮助吗?

网站最后更新: 2022年11月29日

使用以太坊

  • 查找钱包
  • 获取 ETH
  • 去中心化应用 (dapps)
  • 第二层
  • 运行一个节点
  • 稳定币
  • 质押以太币

生态系统

  • 社区中心
  • 以太坊基金会
  • 以太坊基金会博客
  • 生态系统支持方案
  • 以太坊漏洞悬赏计划
  • 生态系统资助计划
  • 以太坊品牌资产
  • Devcon