区块链全栈以太坊(三)合约编写

准备

开发工具 Remix

实例代码PatrickAlphaC/simple-storage-fcc (github.com)

solidity

部署后,每一个合约都有一个地址。(就像账户地址)

部署一个合约其实就是发送一个交易。

remix_deploy.png

一、代码

 //contract 就类似于java的class
 contract SimpleStorage {
    //public 实际上就是创建了一个getter函数。
    //隐式的定义为storage
    uint256 public favNumber=0;
    function store(uint256 _favNumber) public {
        favNumber = _favNumber;
    }

    function retrieve() public view returns(uint256) {
        return favNumber;
    }
 }

二、访问权限

合理的设置访问权限才能避免漏洞。

public/private

public 实际上就是创建了一个getter函数favNumber(),

private表示这个合约是唯一可以调用favNumber()的合约。

external

只对合约外部可见

internala

只有这个合约或者继承他的合约可以读取。

三、storage/state

四、函数标识

solidity_func1.png

红色store调用会产生gas,表示有修改合约状态,

只有更改合约状态的时候才支付gas(transaction cost,不是execution cost),发生交易。

view

只会读取这个合约的状态(比如favNumber)。

view函数不允许修改任何状态,不会产生gas

当 retrieve()被store调用时,那他就需要支付retrieve() 的execution cost gas

pure

连合约状态都没读取,只做简单的内存运算

pure函数也不允许修改任何状态。

不允许读取区块链 数据(所以不能)。

总结

调用view函数是免费的,除非你在消耗gas的函数中调用它。

五、变量的数据位置

函数入参、局部变量 需要指定变量的数据位置(memory,calldata),如

solidity_var1.png
solidity_var2.png

memory和calldata意味着这个变量只是暂时存在,只在调用此addPerson()函数的交易期间暂时存在。

storage 存储变量甚至存在于正在执行的函数之外。

memory

可以被修改的临时变量,string,数组,结构,映射才需要加memory。

uint 不用加meory,默认就是。


solidity_var4.png
solidity_var5.png

calldata

类似memory,但是不可以修改的临时变量

solidity_var3.png

storage

如 全局变量uint256 public favNumber=0; 隐式的定义为storage。

六、部署

部署到NetaMask钱包正在连接的测试网络

solidity_dep1.png
solidity_dep2.png

确保先用测试水龙头领取一些代笔,部署需要支付gas。

点击部署,此时MetaMask插件会有提示,点击打开

solidity_dep3.png

点击确认

solidity_dep4.png

点击 view on etherscan

solidity_dep5.png

可以看到,合约已经通过 account1账号部署到测试链上。

from就是account1地址。

to就是 刚刚创建的合约地址,可以点击打开。

可以看到gas limit 和gas usage比单纯发送以太币(23000gas)高得多。

solidity_dep6.png
solidity_dep7.png

可以看到该合约下面的第一个交易:创建合约。

可以在Remix上点击按钮,在测试网络上做一遍测试。

点击retrieve这种view函数不需要gas,所以浏览器MetaMask插件不会弹出。

点击store这种会修改区块链的函数需要gas,所以浏览器MetaMask插件会弹出来确认(在etherscan上能看到store这个交易)。

solidity_dep8.png
solidity_dep9.png
solidity_dep10.png

测试链的部署可能需要等待挺久时间,所以一开始先在本地

的RemixVM(Shanghai)上调试,然后再部署到测试链Injected Provider。

添加两个用户addPerson ,需要MetaMask弹窗两次确认才可以执行。结果如下:


solidity_dep12.png
solidity_dep11.png

七、切换测试网络

MetaMask里切换就行,Remix会自动感应。

八、按钮颜色类型

蓝色:view方法,不会修改链内容,免费。

橙色:有修改链内容,支付gas。

红色:有转账行为 payable,方法内会用到 msg.value。

例如 FundMe 的fund() 函数。

如果只是接收币,还是橙色如 withDraw

九、继承、重写

  1. 用is 表示继承,重写时 父类 virtual ,子类 override。
  2. 支持多继承。
 contract SimpleStorage {
    function store(uint256 _favoriteNumber) public virtual {
        favoriteNumber = _favoriteNumber;
        retrieve();
    }
}

import "./SimpleStorage.sol";
contract ExtraStorage is SimpleStorage {
    function store(uint256 _favoriteNumber) public override      {
        favoriteNumber = _favoriteNumber + 5;
    }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容