智能合约简介
什么是智能合约?
智能合约只是一个运行在以太坊链上的一个程序。 它是位于以太坊区块链上一个特定地址的一系列代码(函数)和数据(状态)。
智能合约就是一个以太坊帐户。 这意味着他们有余额,他们可以通过网络进行交易。 但是,他们无法被人操控,他们是被部署在网络上作为程序运行着。 个人用户可以通过提交交易执行智能合约的某一个函数来与智能合约进行交互。 智能合约能像常规合同一样定义规则,并通过代码自动强制执行。
前置要求
确保在您已了解有关帐户、交易和以太坊虚拟机后再进入智能合约。
数字自动售货机
智能合约的最佳比喻也许是一种售货机,如 Nick Szabo 所描述的那样。 有了正确的投入,就保证了某些产出。
从售货机中获取快餐:
1钱 + 选择零食 = 零食分发2
这种逻辑是以程序的形式写入自动售货机的。
一个智能合约,就像自动售货机一样,是有逻辑被写入进去的。 下面是使得自动售货机看起来像智能合约的一个简单示例:
1pragma solidity 0.6.11;23contract VendingMachine {45 // Declare state variables of the contract6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // When 'VendingMachine' contract is deployed:10 // 1. set the deploying address as the owner of the contract11 // 2. set the deployed smart contract's cupcake balance to 10012 constructor() public {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Allow the owner to increase the smart contract's cupcake balance18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Allow anyone to purchase cupcakes24 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显示全部复制
就像自动售货机消除了对供应商雇员的需求一样,智能合约可以在许多行业中取代中介机构。
无需准入性
任何人都可以编写智能合约并将其部署到区块链网络上。 你只需要学习如何用智能合约语言编码,并有足够的 ETH 来部署你的合约。 在技术上,部署智能合约是一项交易,所以你需要支付你的Gas,就像你需要为简单的以太坊转账支付 gas 一样。 然而,部署合约所需要消耗的 gas 费要高得多。
以太坊编写智能合约的语言,对开发者比较友好:
- Solidity
- Vyper
然而,它们必须要先编译才能部署,以便以太坊虚拟机可以解释并储存合约。 更多关于编译的内容
可组合性
智能合约在以太坊上公开,并被认为是开放应用程序接口。 这意味着你可以在你自己的智能合约中调用其他智能合约以极大地扩展可能性。 合约甚至可以部署其他合约。
了解更多关于智能合约可组合性的内容。
局限性
智能合约本身无法获取关于”真实世界“的事件信息,因为它们无法发送 HTTP 请求。 这样设计是因为依赖于外部信息可能会危及共识,这对安全性和去中心化而言十分重要。
这可以通过 预言机 来规避。
智能合约资源
OpenZeppelin 合约——**安全智能合约开发的库。**
DappSys——**安全、简单、灵活的智能合约构建模块。**
延伸阅读
- 智能合约:将取代 Lawyer 的区块链技术 - Blockgeek
- 智能合约开发的最佳实践 – 2019 年 11 月 10 日 - Yos Riady