智能合约介绍 威廉·恩崔肯 最后编辑:@ fulldecent,2020 11月30日, 查看贡献者 什么是智能合约? “智能合约”只是在以太坊区块链上运行的程序。它是位于以太坊区块链上特定地址的代码(其功能)和数据(其状态)的集合。
智能合约是一种以太坊账户。这意味着他们有余额,可以通过网络发送交易。但是,它们不受用户控制,而是被部署到网络并按程序运行。然后,用户帐户可以通过提交执行在智能合约上定义的功能的交易来与智能合约进行交互。智能合约可以定义规则(如常规合约),并通过代码自动执行。
先决条件 在进入智能合约世界之前,请确保您已经阅读了账户,交易和以太坊虚拟机。
数字自动售货机 如尼克·萨博(Nick Szabo)所述,智能合约的最佳隐喻也许是自动售货机。使用正确的输入,可以保证一定的输出。
要从自动售货机购买小吃:
钱+小吃选择=分发的小吃 此逻辑已编程到自动售货机中。
像自动售货机一样,智能合约中已编写了逻辑程序。这是一个自动贩卖机的简单示例,看起来像是智能合约:
语用强度0.6 .11 ;
合同VendingMachine {
//声明合同的状态变量
向公众所有者致辞;
映射(地址=> uint )公共纸杯蛋糕余额;
//部署“ VendingMachine”合同后:
// 1.将部署地址设置为合同的所有者
// 2.将已部署的智能合约的纸杯蛋糕余额设置为100
构造函数()public {
所有者=味精。发件人;
cakeBalances [地址(此)] = 100 ;
}
//允许所有者增加智能合约的纸杯蛋糕余额
功能再填充(UINT量)公共{
要求(MSG 。寄件人==所有者,“只有所有者可以再填充。” );
cakeBalances [地址(这个)] + =金额;
}
//允许任何人购买纸杯蛋糕
功能购买(UINT量)公共支付{
要求(MSG 。值> =量* 1个醚,“你必须支付至少1 ETH每蛋糕” );
要求(cupcakeBalances [地址(此)] > =数量,“库存中的蛋糕数量不足,无法完成此购买” );
cakeBalances [地址(这个)] -=金额;
cakeBalances [味精。发件人] + =金额;
}
}
显示所有
📋 复制
就像自动售货机消除了对供应商员工的需求一样,智能合约可以代替许多行业的中介机构。
不允许 任何人都可以编写智能合约并将其部署到网络。您只需要学习如何使用智能合约语言进行编码,并拥有足够的ETH来部署您的合约即可。部署一个聪明的合同在技术上是一个交易,所以你需要支付的天然气以同样的方式,你需要支付气体简单ETH转移。但是,合同部署的天然气成本要高得多。
以太坊拥有开发人员友好的语言来编写智能合约:
坚固性 维珀 有关语言的更多信息
但是,必须先对其进行编译,然后才能进行部署,以便以太坊的虚拟机可以解释和存储合同。有关编译的更多信息
可组合性 智能合约在以太坊上是公开的,可以被认为是开放的API。这意味着您可以在自己的智能合约中调用其他智能合约,以极大地扩展可能的范围。合同甚至可以部署其他合同。
了解有关智能合约可组合性的更多信息。
局限性 仅智能合约无法获得有关“真实世界”事件的信息,因为它们无法发送HTTP请求。这是设计使然,因为依赖外部信息可能会破坏共识,这对于安全性和权力下放至关重要。
有多种方法可以使用oracle解决此问题。
智能合约资源 OpenZeppelin合同- 用于安全智能合同开发的库。
openzeppelin.com/contracts/ 的GitHub 社区论坛 DappSys- 安全,简单,灵活的智能合约构建基块。
dapp.tools/dappsys 的GitHub