solidity阶段性总结

1、solidity中最好不要使用var,使用let,const进行代替。
2、msg.sender,msg.value

pragma solidity ^0.4.24;

contract Foo06{
    address public owner;
    uint256 a;
    
    constructor() public{
        owner=msg.sender;
    }
    
}

由于构造函数只执行一次,因此owner里面的值只会被赋值一次,即owner里面永远都是第一次执行构造函数的时候的值,msg.sender就是owner的值。msg.sender任何人调用了合约的方法,这笔交易中的from就是msg.sender,并不一定是合约的创造者,即不一定是合约的管理者。在部署合约的时候,设置一个全局唯一的合约所有者,后面可使用权限控制。

合约可以通过payable接受钱,但是对钱进行限定,使用msg.value对合约接受到的钱进行控制,函数使用了msg.value,函数需要修饰为payable。

pragma solidity ^0.4.24;

contract Foo07{
    
    uint256 public money;
    
    function paly() public payable{
        money=msg.value;
    }
}

=========================================

pragma solidity ^0.4.24;

contract Foo07{
    
    uint256 public money;
    
    function paly() public payable{
        money=msg.value;
    }
    
    function getBalance() public view returns(uint256){
        return address(this).balance;
    }
}

===========================================

pragma solidity ^0.4.24;

contract Foo07{
    
    uint256 public money;
    
    function paly() public payable{
        require(msg.value>100);
        money=msg.value;
    }
    
    function getBalance() public view returns(uint256){
        return address(this).balance;
    }
}
//使用require进行错误处理

===================================

pragma solidity ^0.4.24;

contract Foo07{
    
    uint256 public money;
    mapping(address=>uint256) public personToMoney;
    
    
    function paly() public payable{
        require(msg.value>100);
        personToMoney[msg.sender]=msg.value;
        money=msg.value;
    }
    
    function getBalance() public view returns(uint256){
        return address(this).balance;
    }
}

同时使用msg.sender和msg.value

3.全局变量
使用ganache图形化工具测试

pragma solidity ^0.4.24;

contract Foo08{
    byte public  blockhash1;
    address public coinbase;
    uint public difficulty;
    uint public gaslimit;
    uint public blockNum;
    uint public timestamp;
    bytes public calldata1;
    uint public gas;
    address public sender;
    bytes4 public sig;
    uint public msgValue;
    uint public now1;
    uint public gasPrice;
    address public txOrigin;
    
    
    constructor() payable {
        blockNum=block.number;
        coinbase=block.coinbase;
        difficulty=block.difficulty;
        gaslimit=block.gaslimit;
        
        timestamp=block.timestamp;
        calldata1=msg.data;
        gas=gasleft();
        sender=msg.sender;
        sig=msg.sig;
        msgValue=msg.value;
        now1=now;
        gasPrice=tx.gasprice;
        txOrigin=tx.origin;

        
    }
}

4错误处理

require(<条件>) 进行错误处理

5修饰器

pragma solidity ^0.4.24;

contract Foo08{
    
    uint256 public money;
    
    constructor() ff() payable{
     
        money=msg.value;
    }
    
    modifier ff() {
       require(msg.value>100);
       _;
    }
}

6事件

pragma solidity ^0.4.24;

contract Foo08{
    
    uint256 public money;
    
    event playEvent(uint256);
    
    constructor() ff() payable{
     
        money=msg.value;
        emit playEvent(money);
    }
    
    modifier ff() {
       require(msg.value>100);
       _;
    }
}

在这里插入图片描述

7 货币单位

1ether=10**18wei
1ether=1000finney
1ether=1000000szabo

8访问函数

pragma solidity ^0.4.24;


contract Foo009{
    uint256 public  data=200;
    
    function getData() returns(uint256){
        return this.data();
    }
    
    
}

this.后的状态变量需要加括号()。

9合约创建

pragma solidity ^0.4.24;


contract Foo009{
    uint256 public  data=200;
    
    function getData() public view  returns(uint256){
        return this.data();
    }
    
    
}


contract Foo091{
    address public ct1;
    
    function getCt(uint256 addr) public view returns (uint256) {
        Foo009 f09=Foo009(addr);
        return f09.getData();
    }
    
}

创建一个合约,返回地址
地址只有balance和transfer方法。

keccak256(…) returns (bytes32):
使用以太坊的(Keccak-256)计算HASH值。紧密打包参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值