智能合约小Demo

Solidity 是用于开发以太坊智能合约的最受欢迎的语言之一,因此,作为一个想要成为区块链开发人员的人,必须学会如何使用 Solidity 开发智能合约。

一、开发环境

我们将使用的 IDE 是 Remix,在浏览器输入 Remix URL。完成后,你应该会看到一个类似以下的界面:

1.jpg

点击标红的solidity即可开始我们的solidity之旅啦;

详细的solidity中文文档地址:https://learnblockchain.cn/docs/solidity/

基础就慢慢参考文档看吧。


二、写一个简单的Demo(一个借助智能合约众筹的项目)

合约代码如下(比较粗糙,有很多可以优化的地方,比如重复发起,只是demo):

pragma solidity ^0.4.0;

contract zhongchou{
    //捐赠人
    struct funder{
     address fundAddress;
     uint toMoney;  //个人捐赠金额
    }
    
    //发起捐赠的人
    struct needer{
     address neederAddress;
     uint goal;  //目标金额
     uint amount;  //已经完成金额
     
     uint funderCount;  //捐赠人数
     mapping(uint => funder) fundMap;  //捐赠人数映射
    }
    
    //全局变量
    uint neederCount;  //捐赠请求总数,可以作为捐赠计划的主键
    mapping(uint => needer) needMap;  //捐赠计划mapping
    
    address owner;  //合约部署者
    
    constructor() public{
        owner = msg.sender;  //在构造函数中给合约部署者赋值
    }
    
    //发起捐赠请求
    //_goal:目标金额
    function newNeeder(uint _goal) public{
        neederCount ++;
        needMap[neederCount] = needer(msg.sender, _goal, 0, 0);
    }

    //用户捐赠
    //_neederCount:捐赠计划主键
    function contribute(uint _neederCount) public payable{
        needer storage _needer = needMap[_neederCount];
        _needer.amount += msg.value;
        _needer.funderCount ++;
        _needer.fundMap[_needer.funderCount] = funder(msg.sender, msg.value);
    }
    
    //检查是否达成目标,如果达成,就把资金转给合约发起者
    //_neederCount:捐赠计划主键
    function isComplete(uint _neederCount) public{
        needer storage _needer = needMap[_neederCount];
        if(_needer.amount > _needer.goal){
            require(msg.sender == owner);  //可以使用modifier前置校验
            _needer.neederAddress.transfer(_needer.amount);
        }
    }
}

三、部署测试:

2.jpg

自己测吧!^_^

jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐