智能合约是代码(它的功能)和数据(它的状态)的集合,存在于以太坊区块链的特定地址。智能合约账户能够在彼此之间传递信息,进行图灵完备的运算。智能合约依靠被称作以太坊虚拟机(EVM)字节代码(以太坊特有的二进制格式)上的区块链运行。
智能合约使用诸如Solidity等高级语言写成,然后编译成字节代码上传到区块链上。
智能合约开发流程大概有以下步骤:
编写智能合约(如基于solidity)
测试智能合约,在测试网络或者私有链进行合约的功能测试
编译和发布合约,将合约部署到链上
操作合约,利用诸如web3.js等接口,通过访问智能合约的地址,来调用和操作智能合约。
结构示意图:
Solidity
Solidity是一种语法类似JavaScript的高级语言。它被设计成以编译的方式生成以太坊虚拟机代码。
代码片段:
pragma solidity^0.4.22;
contract helloWorld{
function renderHelloWorld()public pure returns(string){
return'helloWorld';
}
}
复制代码
ERC-20
最著名的智能合约,想必大家都听过,那就是ERC20。ERC-20是一种代币的标准协议,简单地说,任何ERC-20代币都能立即兼容以太坊钱包(几乎所有支持以太币的钱包,包括MIST、imToken等),由于交易所已经知道这些代币是如何操作的,它们可以很容易地整合这些代币。这就意味着,在很多情况下,这些代币都是可以立即进行交易的。
一个基于ERC-20的代币包含以下接口:
contract ERC20Interface{
function totalSupply()public constant returns(uint);
function balanceOf(address tokenOwner)public constant returns(uint balance);
function allowance(address tokenOwner,address spender)public constant returns(uint remaining);
function transfer(address to,uint tokens)public returns(bool success);
function approve(address spender,uint tokens)public returns(bool success);
function transferFrom(address from,address to,uint tokens)public returns(bool success);
event Transfer(address indexed from,address indexed to,uint tokens);
event Approval(address indexed tokenOwner,address indexed spender,uint tokens);
}