咨询热线:15174985937 联系人:彭金兰 地址:新疆维吾尔自治省乌鲁木齐市乌鲁木齐市延安路吉利商务基地地
Solidity概述及基本代码展示
来源:欧亿测速登录 发布时间:2019-11-15 点击量:126
Solidity是实施智能合约的契约导向的高级语言。它受到C ++,Python和JavaScript的影响,旨在针对以太坊虚拟机(EVM)。
Solidity是静态类型的,支持继承,库和复杂的用户定义类型等功能。
您将会看到,可以创建投票,众筹,盲目拍卖,多重签名钱包等等的合约。
1 Solidity智能合约例子
我们从一个基础的solidity例子开始。开始的时候,你可能看不懂每一行具体的意思,但是没关系,我们会在后续的讲解中介绍每一个细节。
第一行告诉该合约用的是0.4.0版本的solidity编写,并且这些代码具有向上兼容性。保证不会在不同solidity编译版本下编译会出现不同的行为。
从Solidity角度来看,合约就是存在于以太坊区块链中的一个特定地址中的代码和数据集合。uint storedData 声明了一个类型为 uint(256位的无符号整型)的变量,变量名称为 storedData。你可以把它想象为数据库中的一个字段,该字段是可以被数据库中的方法进行查询,修改。在以太坊中,这个字段是属于一个合约字段。在这个例子中,该变量可以通过提供的get,set方法进行获取或是修改。在Solidity中,访问一个变量是不需要通过this来引用的。
这个合约很简单,只是允许以太坊上的任何人来存储一个数据到某个节点,同时把这个操作发布到以太坊中,当然,以太坊上的其他节点同样可以通过调用set方法来修改你已经存储好的值。虽然有被修改,但是对该值操作的任何历史记录都是保存在以太坊中的。不用担心你的存储记录或是修改记录会丢失。后面我们会将到如何对合约进行限制,只允许你一个人修改这个数据。
2 Solidity子货币例子
下面的例子将实现一个简单的加密货币例子。无中生币不在是梦想,当然只有合约的创建人才有这个特权。此外,任何人只要有一个以太坊密钥对就可以进行货币交易,根本不需要注册用户名和密码。这个合约引入了一些新的概念,让我们一个个都过一遍。
address public minter;
声明了一个public,类型为address的状态变量。Address类型是一个160位的值,不允许任何的算术操作。它适合于存储合约地址或是其他人的密钥对。Public关键字会自动产生用于外部访问该变量值的方法。如果不声明public,其他的合约是无法访问该变量的。自动产生的方法类似于:
function minter() returns (address) { return minter; }
当然如果你增加了一个和上面完全一样的方法是没有任何作用的,我们需要变量和产生的方法名完全一致。这块其实编译器会帮助我们完成,不需要我们自己动手编写,我们只要知道这个概念就可以。
mapping (address => uint) public balances;
还是创建了一个公有状态变量,这是一个比address更复杂的数据类型,类似java里的Map<address,uint>,它描述了一个地址和一个uinit数据类型的map关系。Mappings的关系可以看成是一个hash表,所有可能的key都对应了一个0的值。当然在map里不存在只有key值或是只有value值的情况。所以我们需要记住添加了一个什么样的map关系或是像这个例子一样,如何使用它。因为这是个public变量,所以系统会自动为它生成一个get方法,类似于:
function balances(address _account) returns (uint) {
return balances[_account];
}
通过上面的方法我们可以很容易的查询一个账号的余额。
event Sent(address from, address to, uint amount);
这一行创建了一个名为event 的事件。该事件会在该示例的最后一行被触发。用户或是server应用可以花很低的代价(后面会讲代价是什么)来监听事件的触发。一旦这个事件被触发了,监听者接收到三个参数:from, to,amount.也是说从哪个账号,到哪个账号,金额是多少。通过这三个参数可以很容易追踪到具体的交易。为了监听这个事件,我们需要使用如下代码:
注意 :用户是如何调用系统自动生成的balances方法。
Coin方法是构造方法,是在合约产生的时候系统会调用,而且之后不允许被调用。Msg(以及tx和block)是一个全局变量,保存了可以被区块链访问的一些属性。它持久化了创建合约的节点的地址。 Msg.sender是值该方法调用者的地址。
最后,真正完成合约功能的,并且被其他用户调用的是mint和send方法。如果mint是被不是创建该合约的账号调用,不会起任何作用。但是,send可以被任何账号(必须有以太币的账号)调用并发送以太币给另外一个账号。注意,如果你用合约发送以太币到另外一个账号,通过区块链浏览器查看是查看不到任何变化的,因为发送以太币的过程和金额的变化都被存储在了特殊的以太币合约里。而不是体现在账号上。通过使用事件,可以很容易的创建一个区块链浏览器,用来查看交易和账号余额。
原文链接:http://wangxiaoming.com/blog/2018/04/20/HPB-45-ETH-Solidity-code/
相关产品
-
严格的外教录用机制,只聘用来自英国、美国、加拿大国家的外教,还是CEO亲自甄选的那种。重要的是,兰迪的外教教学经验丰富,发音地道纯正,亲和力爆棚!课堂上,小朋友想不开口都难!
-
普通版撼路者无论是平坦的铺装路面,还是坑洼崎岖的非铺装路面,都能轻松应对,只有强悍的动力以及出色的越野性能作为背书,才能做到如此的自信。“麦哲伦版”通过各种越野套件的加持后,相信它的动态表现会更加出色。
-
我基本就是带着70-200在拍摄了,因为200焦距段,跟2.8光圈的组合,基本拍摄这些场景是最好的。这个季节花少了一点,很多都是已经在吐新叶子了。
-
“咱什么都不要了,就这吃不愁、喝不愁,现在就够咱的了,你可要注意。”八十八岁的老父亲不止一次地苦苦相劝。“爸爸,钱不可没有,也不可多有,人的一生关键要有个好名声。”二十几岁的儿子也多次奉劝刘亚及时收手。
-
美的已是全球知名的机器人企业德国库卡的最大股东,控股比例为94.55%。去年,其机器人及自动化系统收入达到270亿元。今年3月,美的宣布向库卡的中国业务注资,共同成立3家合资公司,以拓展工业机器人、医疗机器人和仓储自动化三大领域的业务。同月,美的库卡智能制造产业基地在广东顺德动工。
-
作为正道第一款超跑,HK GT在今年3月份的日内瓦车展上揭开神秘面纱,并被媒体赞为“日内瓦车展最帅超跑”。此次HK GT首次在国内亮相,其外观精致大气、线条流畅奢华,在具有优雅美感的同时,兼备速度与力量,被称为一款具有“双重灵魂”的超跑。
-
尽管讨伐声势浩荡,但因为身体原因,赵本山已经三年未登上春晚舞台了,再加上今年春晚导演为哈文,而此前又曾传出赵本山与哈文的不和,尽管本山大叔近来一直在向外界暗示自己有上春晚的心和力,但羊年春晚的舞台似乎并未给赵本山预留位置。
-
国际化人才希望有国际化的政府服务,浦东建设国际化的“一网通办”政务服务品牌,办事“最多跑一次”;国际化人才向往国际化生活环境,浦东加紧国际化的规划建设,国际学校、国际医院、国际保险等生活配套服务设施正一个个落地:纽约大学上海分校新校址已开工建设,德国、日本、美国、新加坡独资的医院将陆续开业。
热点资讯
- G20峰会供应商,千峰越瓷旗舰店国瓷马克杯四件套29元2019-11-12
- 裁员风暴下的拜耳困境2019-11-09
- 搭载麒麟710的华为Nova3i登陆印度:售价与国行接近2019-06-17
- 万智牌之父加持、Dota2世界观《Artifact》能否成为卡牌游戏新贵?2019-06-17
- “给钱再删”,夫妻“差评师”涉恶意差评敲诈网店万余元被抓2019-06-17
- mysql,简单介绍一下索引2019-06-17
- 《点兔》智乃兔女郎手办巧克力味的黑丝萝莉2019-11-10
- 黄金女神:美元牛市黄金走势分析及建议2019-11-06