Heco火币生态链DAPP智能合约系统开发
20世纪90年代,Nick Szabo首次提出,I8I合约2591开发3365,智能合约的概念。当时,他把智能合约定义为通过结合协议与用户界面,规范和保障计算机网络安全的工具。
Szabo探讨了把智能合约运用于合同协议相关各领域的潜在用途,例如信用体系、支付流程和内容版权管理。
在加密货币领域,智能合约可界定为运行在区块链中的应用或程序。通常,它们作为一种遵循特定规则强制执行的数字化协议发挥作用。这些规则由计算机代码预定义,经所有网络节点复制和执行。
区块链智能合约支持创建去信任化协议。这意味着合约双方通过区块链做出承诺,而无需相互了解或信任。双方确定,如果没有达到条件,合约不会执行。此外,使用智能合约不再需要中间机构,从而显著降低运行成本。
虽然智能合约已由协议支持多年,但借由以太坊创造者兼联合创始人Vitalik Buterin之手才普及开来。值得注意的是,各个区块链实施智能合约的方式有所不同。
本文将重点介绍运行在以太坊虚拟机(EVM)中的智能合约,而以太坊虚拟机是以太坊区块链的重要组成部分。
pragma solidity^0.4.11;
contract Purchase{
uint public value;
address public seller;
address public buyer;
enum State{Created,Locked,Inactive}
State public state;
//确保'msg.value'为偶数
//如果是奇数,使用除法
//通过乘法检查,它不是一个奇数
function Purchase()payable{
seller=msg.sender;
value=msg.value/2;
require((2*value)==msg.value);
}
modifier condition(bool _condition){
require(_condition);
_;
}
modifier onlyBuyer(){
require(msg.sender==buyer);
_;
}
modifier onlySeller(){
require(msg.sender==selller);
_;
}
modifier inState(State _state){
require(state==_state);
_;
}
event Aborted();//失败
event PurchaseConfirmed();//购买确认
event ItemReceived();//项目获得
///终止购买并回收ether
///在合约被锁之前可被购买者回调
function abort()
onlySeller
inState(State.Created)
{
Aborted();
state=***active;
seller.transfer(this.balance);
}
///作为买方确认购买
///事务必须包括'2*value'ether
///ether被锁直到确认收货被回调
function confirmPurchase()
inState(State.Created)
condition(msg.value==(2*value))
payable
{
PurchaseConfirmed();
buyer=msg.sender;
state=State.Locked;
}
///确认买家收到货
///然后释放被锁的ether
function confirmReceived()
onlyBuyer
inState(State.Locked)
{
ItemReceived();
//首先改变状态很重要,否则合约可以使用'using'被再次调用
state=***active;
//NOTE:实际上允许买方和卖方阻止退款——撤回模式可以使用
buyer.transfer(value);
seller.transfer(this.balance);
}
}
智能合约如何运行?
简单来说,智能合约是一种确定性程序,会在满足某些条件时,执行特定任务。因此,智能合约系统通常遵循“如果……就……”的条件语句。虽然“智能合约”这个概念已广为人知,但它其实既非法定合约,也不智能。它们只是运行在区块链分布式系统中的一段代码。
在以太坊网络中,智能合约负责执行和管理用户(地址)彼此交互时的区块链操作。智能合约以外的地址称为“外部账户(EOA)”。因此,智能合约由计算机代码控制,而外部账户(EOA)由用户掌控。
以太坊智能合约基本上由合约代码和两个公钥组成。个公钥由合约创建者提供,另一个公钥即为合约本身,用作每个智能合约的数字标识符。
所有的智能合约部署都通过区块链交易进行,只有在外部账户(EOA)或其他智能合约被调用时才会。但是,智能合约一般由外部账户(EOA),即用户首次触发。
Szabo探讨了把智能合约运用于合同协议相关各领域的潜在用途,例如信用体系、支付流程和内容版权管理。
在加密货币领域,智能合约可界定为运行在区块链中的应用或程序。通常,它们作为一种遵循特定规则强制执行的数字化协议发挥作用。这些规则由计算机代码预定义,经所有网络节点复制和执行。
区块链智能合约支持创建去信任化协议。这意味着合约双方通过区块链做出承诺,而无需相互了解或信任。双方确定,如果没有达到条件,合约不会执行。此外,使用智能合约不再需要中间机构,从而显著降低运行成本。
虽然智能合约已由协议支持多年,但借由以太坊创造者兼联合创始人Vitalik Buterin之手才普及开来。值得注意的是,各个区块链实施智能合约的方式有所不同。
本文将重点介绍运行在以太坊虚拟机(EVM)中的智能合约,而以太坊虚拟机是以太坊区块链的重要组成部分。
pragma solidity^0.4.11;
contract Purchase{
uint public value;
address public seller;
address public buyer;
enum State{Created,Locked,Inactive}
State public state;
//确保'msg.value'为偶数
//如果是奇数,使用除法
//通过乘法检查,它不是一个奇数
function Purchase()payable{
seller=msg.sender;
value=msg.value/2;
require((2*value)==msg.value);
}
modifier condition(bool _condition){
require(_condition);
_;
}
modifier onlyBuyer(){
require(msg.sender==buyer);
_;
}
modifier onlySeller(){
require(msg.sender==selller);
_;
}
modifier inState(State _state){
require(state==_state);
_;
}
event Aborted();//失败
event PurchaseConfirmed();//购买确认
event ItemReceived();//项目获得
///终止购买并回收ether
///在合约被锁之前可被购买者回调
function abort()
onlySeller
inState(State.Created)
{
Aborted();
state=***active;
seller.transfer(this.balance);
}
///作为买方确认购买
///事务必须包括'2*value'ether
///ether被锁直到确认收货被回调
function confirmPurchase()
inState(State.Created)
condition(msg.value==(2*value))
payable
{
PurchaseConfirmed();
buyer=msg.sender;
state=State.Locked;
}
///确认买家收到货
///然后释放被锁的ether
function confirmReceived()
onlyBuyer
inState(State.Locked)
{
ItemReceived();
//首先改变状态很重要,否则合约可以使用'using'被再次调用
state=***active;
//NOTE:实际上允许买方和卖方阻止退款——撤回模式可以使用
buyer.transfer(value);
seller.transfer(this.balance);
}
}
智能合约如何运行?
简单来说,智能合约是一种确定性程序,会在满足某些条件时,执行特定任务。因此,智能合约系统通常遵循“如果……就……”的条件语句。虽然“智能合约”这个概念已广为人知,但它其实既非法定合约,也不智能。它们只是运行在区块链分布式系统中的一段代码。
在以太坊网络中,智能合约负责执行和管理用户(地址)彼此交互时的区块链操作。智能合约以外的地址称为“外部账户(EOA)”。因此,智能合约由计算机代码控制,而外部账户(EOA)由用户掌控。
以太坊智能合约基本上由合约代码和两个公钥组成。个公钥由合约创建者提供,另一个公钥即为合约本身,用作每个智能合约的数字标识符。
所有的智能合约部署都通过区块链交易进行,只有在外部账户(EOA)或其他智能合约被调用时才会。但是,智能合约一般由外部账户(EOA),即用户首次触发。