美文网首页
以太坊-智能合约

以太坊-智能合约

作者: CrazySteven | 来源:发表于2018-08-19 19:41 被阅读44次

上周题目难度是'Hard',就没写,这周小伙伴鸽了,可能下周会做两道吧。以下内容是笔记,写的比较乱,就不整理了:)

function

function name(<parametertypes>) {public|private|internal|external}[constant][payable][returns(<return types>)]{content}
public:即可以被其他合约调用,也可以在本合约挂接调用
external:可以被其他合约调用,本合约调用this.f()
internal:只能在本合约或子类合约中调用
private:只能在本合约调用

匿名函数

一个合约可以有一个匿名函数,此函数不能有参数和返回值,当执行合约上没有的函数或是对这个合约发送ETH的时候,就会执行此匿名函数。

综合小demo:

pragma solidity ^0.4.18;
contract People {
    struct people{
        address add;
        string name;
        uint age;
    }
    people public p;
    event e(address _add, string _name,uint _age);
    function creatP(address _add,string _name, uint _age) external{
        emit e(_add, _name, _age);
        p = people(_add, _name, _age);
        emit e(p.add, p.name, p.age);
    }
}
contract Config {
    uint public version = 1;
    enum Weeks{M1,T2,W3,T4,F5,S6,S7}
    function v() external returns(Weeks){
        version += 1;
        return Weeks.M1;
    }
}
contract Test {
    address public owner;
    event e(string _str,uint num);
    uint public num = 100;
    uint public value;
    uint public price;
    uint public limit;
    uint public gas;
    bool public success;
    constructor() payable public{
        owner = msg.sender;
    }
    function testContract() payable public{
        emit e("before",num);
        delete num;
        emit e("after",num);
    }
    modifier onlyOwner{
        require (msg.sender == owner);
        _;
    }
    function otherContract() public onlyOwner{
        People a = new People();
        a.creatP(msg.sender,"Steven",18);
        Config b = new Config();
        b.v();
    }
    function transfer(address _add, uint amount)payable public {
        value = msg.value;
        gas = gasleft();
        price = tx.gasprice;
        limit = block.gaslimit;
        success = _add.send(amount);
    }
    function() payable public{
        num += 1;
    }
}

继承

demo为多重继承,C继承A和B

contract A{}
contract B{
    constructor (uint _u){}
}
contract C is A,B(20){}

自毁

销毁当前合约,并将当前合约的余额发到指定的地址

contract A{
    function kill(address add){
        selfdestruct(add);
    }
}

call

B call A,B不发生变化,A发生变化

delegatecall

B delegatecall A, B发生变化,A不发生变化

pragma solidity ^0.4.18;

contract A{
    uint public result;
    function numPlus(uint a, uint b) public returns(uint){
        result = a + b;
        return result;
    }
}
contract B{
    uint public result;
    bool public success;
    function call1(address _add) public{
        success = _add.call(bytes4(keccak256("numPlus(uint256,uint256)")),3,3);
    }
    function call2(address _add) public{
        success = _add.delegatecall(bytes4(keccak256("numPlus(uint256,uint256)")),333,333);
    }
}

就酱,下一篇就是发行token了~

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

相关文章

网友评论

      本文标题:以太坊-智能合约

      本文链接:https://www.haomeiwen.com/subject/ieqhiftx.html