文章摘要图:

一个简略的智能合约

先从一个非常根底的比如开端

contract ZhaoxiStorage https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg

uint storedData;

function set(uint x) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
storedData = x;
}

function get() constant returns (uint retVal) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
return storedData;
}
}

在Solidity中,一个合约由一组代码(合约的函数)和数据(合约的状况)组成。合约位于以太坊区块链上的一个地址。

uint storedData; 这行代码声明晰一个状况变量,变量名为storedData,类型为无符号整数uint。能够看做数据库里面的一条记录,能够经过调用函数查询和修正它。在以太坊中,通常只需合约的具有者才干这样做。在这个比如中,函数 set 和 get 别离用于修正和查询变量的值。

跟许多其他言语一样,拜访状况变量时,不需要在前面添加 this. 这样的前缀。

任何人都能够调用set办法设置一个不同的数字掩盖你发布的数字。可是你的数字将会留存在区块链的历史上。稍后咱们会学习怎么添加存取约束。

一个加密钱银比如

接下来的合约将完成一个方式最简略的加密钱银。经过这份代码,任何人都能够发送钱银给其他人,不需要注册用户名和暗码,只需有一对以太坊的公私钥即可。

contract ZhaoxiCoin https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg

// 关键字“public”使变量能从合约外部拜访。
address public minter;
mapping (address => uint) public balances;

// 事情让轻客户端能高效的对改变做出反响。
event Sent(address from, address to, uint amount);

// 这个结构函数的代码仅仅只在合约创立的时分被运转。
function ZhaoxiCoin() https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
minter = msg.sender;
}

// 合约创立者能够调用mint
function mint(address receiver, uint amount) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
if (msg.sender != minter) return;
balances[receiver] += amount;
}

// send能够被具有代币的任何人调用
function send(address receiver, uint amount) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
}

address public minter 这行代码声明晰一个可揭露拜访的状况变量,类型为address。address类型的值巨细为160 bits,适用于存储合约的地址或其他人的公私钥。public关键字会主动为其修饰的状况变量生成拜访函数。没有public关键字的变量将无法被其他合约拜访。另外只需本合约内的代码才干写入。主动生成的函数如下:

function minter() returns (address) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg return minter; }

下一行代码mapping (address => uint) public balances; 创立了一个public的状况变量,可是其类型更加的杂乱。该类型将一些address映射到无符号整数。mapping能够被认为是一个哈希表,每一个或许的key对应的value被虚拟的初始化为全0。关于一个mapping,无法获取一个包括其所有key或许value的链表。所以咱们得自己记取添加了哪些东西到mapping中。在这个比如中由public关键字生成的拜访函数将会更加杂乱,其代码大致如下:

function balances(address _account) returns (uint balance) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
return balances[_account];
}

event Sent(address from, address to, uint value)这行代码声明晰一个“事情”。由send函数的最终一行代码触发。客户端能够监听这些由区块链触发的事情。事情触发时,监听者会同时接收到from,to,value这些参数值,能够便利的用于盯梢交易。为了监听这个事情,你能够使用如下代码:

ZhaoxiCoin.Sent().watch(https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg}, '', function(error, result) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
if (!error) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
console.log("ZhaoxiCoin transfer: " + result.args.amount +
" coins were sent from " + result.args.from +
" to " + result.args.to + ".");
console.log("Balances now:\n" +
"Sender: " + ZhaoxiCoin.balances.call(result.args.from) +
"Receiver: " + ZhaoxiCoin.balances.call(result.args.to));
}
}

这里有个比较特别的函数 ZhaoxiCoin。它是一个结构函数,会在合约创立的时分运转,之后就无法被调用。它会永久得存储合约创立者的地址。msg(以及tx和block)是一个全局变量,它包括了一些能够被合约代码拜访的属于区块链的属性。msg.sender 总是存放着当时函数的外部调用者的地址。

最终,真正被用户或许其他合约调用,用来完本钱合约功用的函数是mint和send。假如合约创立者之外的其他人调用mint,什么都不会产生。而send能够被任何人(具有必定数量的代币)调用,发送一些币给其他人。

以上便是一个简略的加密钱银的完好代码和说明。

*提示:代码格局显示有问题的话,请拜访原文:http://wangxiaoming.com/blog/2016/05/03/blockchain-tech-introduciton-to-smart-contracts/

本文链接:https://www.8btc.com/article/90559
转载请注明文章出处

文章摘要图:

一个简略的智能合约

先从一个非常根底的比如开端

contract ZhaoxiStorage https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg

uint storedData;

function set(uint x) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
storedData = x;
}

function get() constant returns (uint retVal) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
return storedData;
}
}

在Solidity中,一个合约由一组代码(合约的函数)和数据(合约的状况)组成。合约位于以太坊区块链上的一个地址。

uint storedData; 这行代码声明晰一个状况变量,变量名为storedData,类型为无符号整数uint。能够看做数据库里面的一条记录,能够经过调用函数查询和修正它。在以太坊中,通常只需合约的具有者才干这样做。在这个比如中,函数 set 和 get 别离用于修正和查询变量的值。

跟许多其他言语一样,拜访状况变量时,不需要在前面添加 this. 这样的前缀。

任何人都能够调用set办法设置一个不同的数字掩盖你发布的数字。可是你的数字将会留存在区块链的历史上。稍后咱们会学习怎么添加存取约束。

一个加密钱银比如

接下来的合约将完成一个方式最简略的加密钱银。经过这份代码,任何人都能够发送钱银给其他人,不需要注册用户名和暗码,只需有一对以太坊的公私钥即可。

contract ZhaoxiCoin https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg

// 关键字“public”使变量能从合约外部拜访。
address public minter;
mapping (address => uint) public balances;

// 事情让轻客户端能高效的对改变做出反响。
event Sent(address from, address to, uint amount);

// 这个结构函数的代码仅仅只在合约创立的时分被运转。
function ZhaoxiCoin() https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
minter = msg.sender;
}

// 合约创立者能够调用mint
function mint(address receiver, uint amount) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
if (msg.sender != minter) return;
balances[receiver] += amount;
}

// send能够被具有代币的任何人调用
function send(address receiver, uint amount) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
}

address public minter 这行代码声明晰一个可揭露拜访的状况变量,类型为address。address类型的值巨细为160 bits,适用于存储合约的地址或其他人的公私钥。public关键字会主动为其修饰的状况变量生成拜访函数。没有public关键字的变量将无法被其他合约拜访。另外只需本合约内的代码才干写入。主动生成的函数如下:

function minter() returns (address) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg return minter; }

下一行代码mapping (address => uint) public balances; 创立了一个public的状况变量,可是其类型更加的杂乱。该类型将一些address映射到无符号整数。mapping能够被认为是一个哈希表,每一个或许的key对应的value被虚拟的初始化为全0。关于一个mapping,无法获取一个包括其所有key或许value的链表。所以咱们得自己记取添加了哪些东西到mapping中。在这个比如中由public关键字生成的拜访函数将会更加杂乱,其代码大致如下:

function balances(address _account) returns (uint balance) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
return balances[_account];
}

event Sent(address from, address to, uint value)这行代码声明晰一个“事情”。由send函数的最终一行代码触发。客户端能够监听这些由区块链触发的事情。事情触发时,监听者会同时接收到from,to,value这些参数值,能够便利的用于盯梢交易。为了监听这个事情,你能够使用如下代码:

ZhaoxiCoin.Sent().watch(https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg}, '', function(error, result) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
if (!error) https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
console.log("ZhaoxiCoin transfer: " + result.args.amount +
" coins were sent from " + result.args.from +
" to " + result.args.to + ".");
console.log("Balances now:\n" +
"Sender: " + ZhaoxiCoin.balances.call(result.args.from) +
"Receiver: " + ZhaoxiCoin.balances.call(result.args.to));
}
}

这里有个比较特别的函数 ZhaoxiCoin。它是一个结构函数,会在合约创立的时分运转,之后就无法被调用。它会永久得存储合约创立者的地址。msg(以及tx和block)是一个全局变量,它包括了一些能够被合约代码拜访的属于区块链的属性。msg.sender 总是存放着当时函数的外部调用者的地址。

最终,真正被用户或许其他合约调用,用来完本钱合约功用的函数是mint和send。假如合约创立者之外的其他人调用mint,什么都不会产生。而send能够被任何人(具有必定数量的代币)调用,发送一些币给其他人。

以上便是一个简略的加密钱银的完好代码和说明。

*提示:代码格局显示有问题的话,请拜访原文:http://wangxiaoming.com/blog/2016/05/03/blockchain-tech-introduciton-to-smart-contracts/

本文链接:https://www.8btc.com/article/90559
转载请注明文章出处

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注