区块链学堂(12):Browser-solidity 3–数组增删改查的合约
2018-01-04 16:41
141 查看
我们依然打开Browser-solidity的地址:
https://ethereum.github.io/browser-solidity
这里的push就是给该数组增加一个元素。//这里实现了对数组的新增功能
将上面的代码复制黏贴到Browser-solidity上面,可以看到编译成功,并生成了可部署的web3 deploy代码。
这里我们在内存中试试看该智能合约的4个基本方法 增删改查
1. add function
输入
PS:需要注意的是这里的getStrAt和add,update,delete等方法颜色不同,按上方的分类,一个是transaction,一个则是call,因此在geth上的调用方法也是不同的。
2. getStrAt function
既然已经增加了一个元素,我们就可以查看数组
实际结果如下:getStrAt[0]
getStrAt[1]:
3. updateStrAt functoin
4. deleteStrAt function
要测试这个方法,稍微麻烦点,最好是
step 1需要先add(“hello 01”), add(“hello 02”),add(“hello 03”)
step 2然后调用deleteStrAt(0);
step 3 检查是否第一项被删除,而getStrAt(0)应该等于”hello 02″, getStrAt(1)应该等于”hello 03″
然后重复step1-3,作用于deleteStrAt(1),删除中间项目,或者deleteStrAt(2)删除最后一项,还有deleteStrAt(3)/deleteStrAt(100)/deleteStrAt(-100) 等检查是否做了边界检查。
这里时间有限,就不试验了,有兴趣的同学可以自己在browser solidity上面尝试。
作为礼物,这里有另外的几个简单的智能合约,有兴趣的同学都可以多用browser-solidity来尝试
https://ethereum.github.io/browser-solidity
一个简单的实现对数组增删改查的智能合约
pragma solidity 0.4.9; /*数组类型Demo*/ contract DemoTypes303 { /*String数组例子*/ string[] strArr; function add(string str){ strArr.push(str); } function getStrAt(uint n) constant returns (string s){ string tmp = strArr ; return tmp; } function updateStrAt(uint n, string str) { strArr = str; } function deleteStrAt(uint index) { uint len = strArr.length; if (index >= len) return; for (uint i = index; i<len-1; i++) { strArr[i] = strArr[i+1]; } delete strArr[len-1]; strArr.length--; } }
代码分析
string[] strArr;定义了一个字符串的数组变量strArr, 且该变量没有public因此不可见
strArr.push(str);其中的push是数组类型的两个member之一,另一个是length.
这里的push就是给该数组增加一个元素。//这里实现了对数组的新增功能
function add(string str){ strArr.push(str); }
getStrAt(uint n)是一个简单的读取字符串的函数,//这里实现对数组的读取功能
updateStrAt(uint n, string str)// 实现对数组的更新功能
deleteStrAt(uint index)这个值得一说,因为solidity默认的数组类型中没有删除功能,因此此处自己写了一个删除代码,核心方法就是保证删除某项后,后面的元素依次向前,同时删除数据,同时保证数组的member length正确。
Browser solidity 部署和调用
将上面的代码复制黏贴到Browser-solidity上面,可以看到编译成功,并生成了可部署的web3 deploy代码。这里我们在内存中试试看该智能合约的4个基本方法 增删改查
1. add function
输入
hello 01, 然后点击add按钮,我们可以看到在经过一部分gas的消耗后,该数据被执行成功!
PS:需要注意的是这里的getStrAt和add,update,delete等方法颜色不同,按上方的分类,一个是transaction,一个则是call,因此在geth上的调用方法也是不同的。
2. getStrAt function
既然已经增加了一个元素,我们就可以查看数组
strArr的数值了,根据数组常识,我们只增加了一个元素,因此
getStrAt[0]应该为
hello 01. 而
getStrAt[1]则应该为错误。
实际结果如下:getStrAt[0]
getStrAt[1]:
3. updateStrAt functoin
4. deleteStrAt function
要测试这个方法,稍微麻烦点,最好是
step 1需要先add(“hello 01”), add(“hello 02”),add(“hello 03”)
step 2然后调用deleteStrAt(0);
step 3 检查是否第一项被删除,而getStrAt(0)应该等于”hello 02″, getStrAt(1)应该等于”hello 03″
然后重复step1-3,作用于deleteStrAt(1),删除中间项目,或者deleteStrAt(2)删除最后一项,还有deleteStrAt(3)/deleteStrAt(100)/deleteStrAt(-100) 等检查是否做了边界检查。
这里时间有限,就不试验了,有兴趣的同学可以自己在browser solidity上面尝试。
作为礼物,这里有另外的几个简单的智能合约,有兴趣的同学都可以多用browser-solidity来尝试
pragma solidity ^0.4.4; contract DemoTypes { /*uint public resultOfF;*/ event LogUint(uint value); event LogInt (int value); function f(uint a) returns (uint b) { uint result = a * 8; /*resultOfF = result; //debug used only;*/ LogUint(result); return result; } /*输入长度宽度,返回面积*/ function f2(int width, int height) returns (int square) { if (width < 0 || height < 0) throw; int result = width * height; LogInt(result); return result; } /*输入N,计算N的阶乘,循环实现*/ function f3(uint n) returns (uint jiecheng) { if (n == 0) throw; uint result = 1; for (uint i=1; i<=n; i++) { result *= i; } return result; } /*计算从1到N的求和*/ function f4(uint n) returns (uint sum) { if (n == 0) throw; uint result = 0; for (uint i=0; i<=n; i++) { result +=i; } return result; } }
下一章我们将介绍一个简化版的代币合约,敬请期待!
相关文章推荐
- 区块链学堂(13):Browser-solidity 4–Token代币合约
- 区块链学堂(14):Browser-solidity 5–Token基于账户的代币合约
- 区块链学堂(13):Browser-solidity 4–Token代币合约
- 区块链学堂(14):Browser-solidity 5–Token基于账户的代币合约
- 区块链学堂(10):Browser-solidity
- 区块链学堂(11):Browser-solidity 2–右侧的奥秘
- 区块链学堂(4):以太坊基本概念及工具Geth、Browser-solidity、Mist
- 区块链学堂(4):以太坊基本概念及工具Geth、Browser-solidity、Mist
- 区块链学堂(11):Browser-solidity 2–右侧的奥秘
- 区块链学堂(4):以太坊基本概念及工具Geth、Browser-solidity、Mist
- 区块链学堂(11):Browser-solidity 2–右侧的奥秘
- 区块链学堂(10):Browser-solidity
- 区块链学堂(28):用Mapping来实现一个简单的代币合约
- 《区块链学堂》第四课:以太坊高级数据类型和代币合约(附课程视频)
- 区块链学堂(3):Solidity
- 区块链学堂(17):Mist 3–合约页面&部署合约
- 区块链-智能合约简单脚本编写方法(solidity)
- 区块链学堂(2):最简单的智能合约
- 区块链学堂(18):Mist 4–代币Token合约详解
- 区块链智能合约solidity入门