div#pop_ad { opacity: 0; }
☛值类型和引用类型的区别
☛布尔类型(bool)
☛整型(int、uint)
☛定点型小数(fixed、ufixed)
☛地址类型(address)
☛有理数和整数字面量
☛地址字面量
☛字符串字面量
☛十六进制字面量(hex)
☛枚举类型(enum)
bool a = true;bool b = !a;// a == b - false// a != b - true// a || b - true// a b - false
比较: =, ,==,!=, =, (结果为bool)位操作符: ,|,^(按位异或),~(按位取反)算术运算符:+, - ,一元 - ,一元 +,*,/,%(取余),**(幂), (左移), (右移)
[ { "constant": false, "inputs": [ { "name": "index", "type": "uint8" }, { "name": "s", "type": "string" } ], "name": "removeItem", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }]address .balance(uint256)从当前合约地址中给调用函数的地址账户转入amounts数量(以wei为单位)的金额,即从当前合约转账到某账户地址。如果执行失败,将抛出异常,需要支付2300gas的费用,不可以调整。
address .transfer(uint256 amount)
pragma solidity ^0.4.24;contract AddressExample { //定义一个接受以太币的函数往合约里充值 function AddressExample() payable{} //函数的参数分别是划转到某账号地址以及转账数量 function giveEthersTo(address _toAccount,uint amount){ if (this.balance =amount){ _toAccount.transfer(amount); } } function getBalance() view returns(uint){ return this.balance; } //定义一个匿名的回退函数接收异常情况下退回的以太币 function() payable{}}如果合约地址调用transfer,那么需要合约地址有payable类型的回退函数,并且会随着转账一块执行回退函数中的代码,如果因为回退函数中的代码执行把gas消耗光了,EVM会抛出异常,转账也会被回退。send是低级对等的转账。执行失败,不会抛出异常,会返回false,需要支付2300gas的费用,不可以调整。推荐使用transfer而不使用sendaddress .send(uint256 amount) returns (bool)call(), callcode() 和 delegatecall() 函数
address .call(...) returns (bool) address .callcode(...) returns (bool) address .calldelegate(...) returns (bool)
address nameReg = 0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2;nameReg.call("register", "MyName");nameReg.call(bytes4(keccak256("fun(uint256)")), a);namReg.call.gas(1000000)("register", "MyName");nameReg.call.value(1 ether)("register", "MyName");nameReg.call.gas(1000000).value(1 ether)("register", "MyName");contract D { uint public n; address public sender; function callSetN(address _e, uint _n) { _e.call(bytes4(sha3("setN(uint256)")), _n); // 执行结果:改变了E中的变量值, 而当前的同名变量并没改变。 } function callcodeSetN(address _e, uint _n) { _e.callcode(bytes4(sha3("setN(uint256)")), _n); // 执行结果:当前状态变量被改变,而E的并没改变。 } function delegatecallSetN(address _e, uint _n) { _e.delegatecall(bytes4(sha3("setN(uint256)")), _n); //执行结果同callcode }}contract E { uint public n; address public sender; function setN(uint _n) { n = _n; sender = msg.sender; // 如果D用call的方式调用,则msg.sender是D的合约地址 //如果D用callcode的方式调用,则msg.sender不会被获取 //如果D用delegateCall的方式调用,msg.sender也不能被获取 // 如果是C中的函数foo()间接调用了. msg.sender则是C // 如果D用callcode或者delegateCall调用,则this指向D }}contract C { function foo(D _d, E _e, uint _n) { _d.delegatecallSetN(_e, _n); }}pragma solidity ^0.4.24;contract Person{ uint age = 10; function increaseAge(string name, uint num) returns (uint){ return ++age; } function getAge() returns (uint){ return age; }}contract CallTest{ function callByFun(address addr)returns (bool){ bytes4 methodId = bytes4(keccak256("increaseAge(string,uint256)")); return addr.call(methodId,"jack", 1); }}address(this).balancethis.balance
-END-

助教卫星:lkxy007
添加新手交流群:币种分析、每日早晚盘分析
添加助理微信,一对一亲自指导:YoYo8abc