区链的『智能合约』是一个容易引起争议的概念,一次Vitalik也说后悔用智能合约(smart contract)这个名字了,不如当初叫“persistent scripts”,大约是为这个概念吵累了。有人也问这玩意就一是一段程序脚本,哪里智能了?但如果这样说,大约现在命名为『智能』的东西没有一个配得上吧,智能手机大约可以叫做可以自由安装软件的手机?何况英文的smart和intelligent在中文中都翻译成『智能』,这更是容易引起误解。
所以那次争论中,也有人建议叫做“stored procedures”,就是数据库的存储过程。如果把区链看做一个分布式数据库的话,从技术实现上来看,智能合约确实很像数据库存储过程。使用一种新的编程语言也不是更本区别,如果使用更通用的VM,可以和其他的程序使用完全一样的编程语言。另外大家常说的确定性(deterministic),实际上也是图灵机本身具备的特性,只要不引入随机机制,也很难写出不deterministic的程序。那为什么新造出个词汇呢?套用一句俗话,我们在谈论『智能合约』的时候,到底指的是什么,I88方案I928流程8024
//Empty internal constructor,to prevent people from mistakenly deploying
//an instance of this contract,which should be used via inheritance.
constructor()internal{}
function _msgSender()internal view returns(address payable){
return msg.sender;
}
function _msgData()internal view returns(bytes memory){
this;//silence state mutability warning without generating bytecode-see github.com/ethereum/so…
return msg.data;
}
}
//定义Approval事件,在发生代币授权时触发该事件
event Approval(address indexed owner,address indexed spender,uint256 value);
totalSupply函数
//获取当前代币的总供应量
function totalSupply()external view returns(uint256);
balanceOf函数
//获取当前账户的代币余额
function balanceOf(address account)external view returns(uint256);
transfer函数
//代币转移函数,将amount数量的代币转移到to地址
function transfer(address to,uint256 amount)external returns(bool);
allowance函数
//获取owner地址账号授权(approve方法进行授权)给spender地址的代币数量
function allowance(address owner,address spender)external view returns(uint256);
class[[eosio::contract("hello")]]hello:public contract{
public:
using contract::contract;
[[eosio::action]]
void hi(name user){
print("Hello,",user);
}
};
EOSIO_DISPATCH(hello,(hi))
contract Context{