以太坊智能合约开发(四):Solidity转账智能合约实验

本文介绍了如何使用Solidity编写一个分布式转账智能合约,包括合约管理员分发代币和用户间转账功能。合约中包含了自定义修饰符以确保权限控制和防止溢出错误。并通过在线调试展示了合约的执行过程,验证了管理员分发代币和用户转账的功能。
摘要由CSDN通过智能技术生成

以太坊智能合约开发(四):Solidity转账智能合约实验


1 合约编写

编写一个分布式转账智能合约,部署合约的人为合约管理员,只有管理员可以为其他用户发放代币,其他用户之间可以互相转账,转账的操作以事件的方式被记录在链上。

  • 版本声明和合约创建:
pragma solidity ^0.4.24;
contract coin {
}
  • 声明全局变量manager,作为本合约的管理员:
    address public manager;
  • 声明映射balances,通过balances[addr]来查看地址余额:
    mapping (address => uint) public balances;
  • 声明事件Sent,用来记录转账过程:
    event Sent (address _From,address _To,uint amount);
  • 构造函数,将调用者的地址赋予manager:
    constructor() public { manager = msg.sender; }
  • 自定义修饰符(modifier)isManager,判断分发代币的人是否是管理员:
 modifier isManager{
 	require(msg.sender == manager,"you are not the manager!");
    _;
 }
  • 自定义修饰符overflow,因为solidity本身对于数的加法溢出没有做处理,因此我们需要防备这种情况:
modifier overflow(address receiver,uint amount){
    require(balances[receiver] + amount > balances[receiver], "too many balances for receiver");
     _;
 }
  • reward函数,通过管理员为其他账户增加余额:
function reward(address receiver,uint amount) public isManager overflow(receiver,amount){
        balances[receiver] += amount;
    }
  • send函数,调用时用户会将自己余额中的部分代币发送给输入地址所对应的账户:
function send(address receiver,uint amount) public overflow(receiver,amount){
    balances[msg.sender] -= amount;
    balances[receiver] += amount;
    emit Sent(msg.sender, receiver, amount);
}

2 在线调试

执行上面的智能合约,合约执行成功。
在这里插入图片描述
以管理员身份尝试分发代币,并通过balances查询地址余额。
在这里插入图片描述
在这里插入图片描述
当以非管理员身份调用reward函数发放代币时,显示报错并调用失败。
在这里插入图片描述
普通用户之间相互转账并查询地址余额。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值