智能合约是一种计算机代码,【18I链上合约-259l开发系统3365】可简化某些协议的执行并中间商的需求。智能合约和区块链是相关技术,因为后者是一个智能合约平台。换句话说,智能合约建立在区块链上。
有大量智能合约应用程序和智能合约用例。
交付服务是智能合约的例子之一:智能合约可以在包裹交付后自动将钱转账给快递员。无需签署任何传统合同,发送方只需用加密货币填充智能合约,然后智能合约通过硬币(例如和智能合约)来处理所有事务。
换言之智能合约会在满足某些条件时执行写入其代码中的内容,使交易透明,防欺诈,更快且不可逆,不需中央授权,代码可以帮助交易双方在没有中间人的情况下进行协作。
智能合约的概念已经探讨了20多年,随着区块链技术的到来,才有机会获得更广泛的利用。
pragma solidity >=0.7.0 <0.9.0;
//用Remix编写,需手动调用function以实现相关功能
contract SimplePaymentChannel{
address payable public sender;//发件人地址
address payable public recipient;//收件人地址
uint public expiration;//存储合约到期时间,防止收件人一直不关闭合约,占用发件人以太币资源
//构造函数,部署合约时调用,仅调用一次
//初始化发件人地址,收件人地址,合约有效时间
constructor(address payable recipientAddress, uint256 duration) payable{
sender = payable(msg.sender);//msg.sender是address类型,需强制类型转换为payable address类型
recipient = recipientAddress;
expiration = block.timestamp + duration;
}
//销毁合约,只有收件人能销毁合约
function close(uint256 amount, bytes memory signature) external{
//require()中判断条件为true则继续,为false则退出该function,回退该function内所有更改
require(msg.sender == recipient);//判断调用该function地址是否为收件人
require(isValidSignature(amount, signature));//判断收件人是否掌握有正确的的发件人消息签名
recipient.transfer(amount);//把应得的以太币发送给收件人,谁调用transfer(),就给谁转账
selfdestruct(sender);//销毁当前合约,将合约剩余资金发送到给定地址sender
//由于合约内容已被记录在旧的区块上,仍可以被查询,但不能被再次调用,除非重新部署该合约
}
//合约有效期续期,仅有发件人可以调用
function extend(uint256 newExpiration) external{
require(msg.sender == sender);//判断调用者是否为发件人
require(newExpiration > expiration);//判断新的有效期是否大于当前有效期
expiration = newExpiration;//重置合约有效期
}
//判断当前合约是否在有效期内
function claimTimeout() external{
require(block.timestamp >= expiration);//判断当前合约是否过期,若过期,则销毁合约
selfdestruct(sender);//销毁合约
}
//函数isValidSignature(),splitSignature(),recoverSigner(),prefixed()涉及到 椭圆曲线加密 消息的验证过程,
//详见我的另一篇博客https://ww******/forkroad/p/16121333.html,有详细介绍
function isValidSignature(uint256 amount, bytes memory signature) internal view returns(bool){
bytes32 message = prefixed(keccak256(abi.encodePacked(this, amount)));//根据当前地址this和转账金额amount双重加密为消息message
return recoverSigner(message, signature) == sender;//
}
分投趣Fintoch借贷质押模式系统开发部署技术
广州网站/软件服务相关信息
11月19日
11月19日
11月15日
11月11日
11月11日
11月11日
11月11日
11月11日
11月9日
11月9日