ethereum(以太坊)(一)
从这周开始,开始学习以太坊开发--solidity,开始决定往区块链方向发展,毕竟区块链技术应用广泛。一开始接触solidity开发语言不太习惯,毕竟一直在学习python语法,有很多都不能接受。有难度,我喜欢!!
成功者往往会选择走人少走的,更艰难的路,只有做别人都很难实现的事,再加上个人加倍付出的努力,成功才更有意义!!!
pragma solidity ^0.4.0;
contract Test{
string str1;
uint8 _age;
uint8 _height;
uint8 _sex;
address _owner;
//函数名与与合约名一样则表示构造函数,内部赋值变量需要先声明状态变量
//Variables inside the construct cannot be called directly outside
function Test(){ //==constructor
_age = 10;
_height = 140;
_sex = 1;
_owner = msg.sender;
//uint public _mouth;ParserError
}
function setvalue(uint8 age){
_age = age;
}
function getvalue() constant returns(uint8){
return _age;
}
function setStrvalue(string pam){
str1 = pam;
}
//向字符串内传参,使用双引号("");若使用单引号('),SyntaxError: Unexpected token ' in JSON at position 1
function getStrvalue() constant returns(string){
return str1;
}
//未执行kill(),返回当前合约地址;执行kill(),error: Failed to decode output: TypeError: Cannot read property 'length' of undefined
function getOwner() constant returns(address){
return _owner;
}
// 析构函数:当msg.sender为owner,删除合约地址
function kill() public{
if (_owner == msg.sender){
selfdestruct(_owner);
}
}
}
强制的数据位置(Forced data location)
状态变量(State variables)强制为: storage
默认数据位置(Default data location)
函数参数及返回参数:memory
复杂类型的局部变量:storage 深入分析
storage 存储结构是在合约创建的时候就确定好了的,它取决于合约所声明状态变量。但是内容可以被(交易)调用改变。
Solidity 称这个为状态改变,这也是合约级变量称为状态变量的原因。也可以更好的理解为什么状态变量都是storage存储。 memory 只能用于函数内部,memory 声明用来告知EVM在运行时创建一块(固定大小)内存区域给变量使用。
storage 在区块链中是用key/value的形式存储,而memory则表现为字节数组
ethereum(以太坊)(一)的更多相关文章
- ethereum(以太坊)(实例)--"安全的远程购买"
pragma solidity ^0.4.10; contract Safebuy{ uint public price; address public seller; address public ...
- ethereum(以太坊)(实例)--"简单的公开竞拍"
说真的,刚开始接触这个竞拍案例--“简单的公开竞拍”,我就抱着简单的心态去查看这个实例,但是自我感觉并不简单.应该是我实力不到家的原因吧!!!233333...不过经过大半天的努力,自己理解完之后,觉 ...
- ethereum(以太坊)(十四)--Delete
pragma solidity ^0.4.10; contract Delete{ /* delete可用于任何变量(除mapping),将其设置成默认值 bytes/string:删除所有元素,其长 ...
- ethereum(以太坊)(基础)--容易忽略的坑(三)
pragma solidity ^0.4.10; contract Byte{ bytes [] public T=new bytes[](3); function setLeng(uint len) ...
- ethereum(以太坊)(基础)--容易忽略的坑(二)
pragma solidity ^0.4.0; contract EMath{ string public _a="lin"; function f() public{ modif ...
- ethereum(以太坊)(基础)--容易忽略的坑(一)
pragma solidity ^0.4.0; contract base{ address public _owner=msg.sender; uint _a; string internal _b ...
- ethereum(以太坊)(十三)--异常处理/元祖
pragma solidity ^0.4.4; contract Students{ uint[] data= new uint[](4); address _owner = msg.sender; ...
- ethereum(以太坊)(十二)--应用(二)__投票(基础总和)
编写应用合约之前,先弄清它的逻辑,有助于我们更好的部署合约 pragma solidity ^0.4.21; pragma experimental ABIEncoderV2; contract vo ...
- ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)
pragma solidity ^0.4.4; contract funder{ //0xca35b7d915458ef540ade6068dfe2f44e8fa733c //0x14723a09ac ...
随机推荐
- SQL——行转列,列转行
行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清 ...
- MySQL查询上个月数据
SELECT * FROM order o WHERE o.payTime BETWEEN DATE_FORMAT(DATE_ADD(NOW(),INTERVAL MONTH),'%Y-%m-01') ...
- 洛谷 P1195 口袋的天空(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1195 思路: 首先可以判断这道题是用最小生成树来做的,然后在将其合并时用ans记录一下它的总消耗, ...
- (12)JavaScript之[事件][事件监听]
事件 /** * 事件: * onload 和 onunload 事件在用户进入或离开页面时被触发 * * onchange事件常结合对输入字段的验证来使用 * onmouseover 和 onmou ...
- Struts2_Action和Result总结
Action 1.实现一个Actiond的最常用方式:从ActionSupport继承2.DMI动态方法调用3.通配符配置 *{1}{2}... a) *_*4.接收参数的方法(一般用属性或者Doma ...
- easyUI 节点树选择
定义: <input id="treeFFatherId" name="treeFFatherId" value="" style=& ...
- So you want to write a desktop app in Python
So you want to write a desktop app in Python Thomas Kluyver 2014-06-16 23:55 51 Comments Source This ...
- vs下如何调试Dll
1.首先需要一个exe加载你的dll 2.dll项目的属性设置 3.将dll设为启动项 4.在dll中设置断点 F5就可以调试了
- Altium_Designer如何快速寻找元件和封装
初学Altium碰到最多的问题就是:不知道元件放在哪个库中.这里我收集了DXP2004常用元件库下常见的元件.使用时,只需在libary中选择相应元件库后,输入英文的前几个字母就可看到相应的元件了.通 ...
- MySQL数据库实验五:数据更新
实验五 数据更新 一.实验目的 掌握数据更新操作的用法. 二.实验环境 三.实验示例 1.往基本表SC中插入元组. ① INSERT INTO S(S#,SNAME,AGE,SEX) VA ...