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

  • 1 合约编写
  • 2 在线调试

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函数发放代币时,显示报错并调用失败。

普通用户之间相互转账并查询地址余额。

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

  1. MIMIC 以太坊医疗项目开发(5)truffle部署智能合约

    truffle是以太坊开发框架, 本地的用来编译.部署智能合约的工具. 1. Truffle安装 npm install truffle -g 2. Truffle项目开发 创建目录 mkdir Me ...

  2. 基于以太坊的智能合约开发教程Solidity modifier

    基于以太坊的智能合约开发教程Solidity modifier pragma solidity ^0.4.0;contract modifierTest{address owner;uint publ ...

  3. solidity payable_以太坊区块链搭建与使用(五)-智能合约Solidity

    一.智能合约Solidity开发工具 1.remix-ide http://remix.ethereum.org/ 在线版本,也可以去github下载安装到本地.开发.编译.发布.执行.测试 2.re ...

  4. 基于以太坊的次高价盲拍solidity智能合约(二)

    基于以太坊的次高价盲拍solidity智能合约(二) 4.揭标 5.第三方仲裁人终结拍卖 4.揭标 揭标的过程应该是本智能合约中最复杂且具有灵魂的关键步骤. 当每个发起过竞标的用户,利用该标的隐式价格 ...

  5. 以太坊和Metamask开发web应用时不再需要密码

    我在ConsenSys为各种客户构建了大量的概念证明,通常他们想要利用以太坊区块链来解决某些业务用例.奇怪的是,这些系统通常设计有标准的网络登录(即用户名和密码).我总是问自己为什么我还在这样做设计, ...

  6. 以太坊学习路线——(四、上)Truffle安装、truffle项目创建、编译、部署

    这篇博客演示的基本操作系统环境是CentOS 7,参考书籍:以太坊开发实战--以太坊关键技术与案例分析 第十章(吴寿鹤.冯翔.刘涛.周广益   著).鉴于内容较多,分成两篇,下一篇博文请见:以太坊学习 ...

  7. 以太坊代码标准是什么_以太坊的包容性开发语言里到底藏着什么秘密?

    Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行. Sol ...

  8. 为什么选择Java进行以太坊区块链开发

    当有人说Java时,你会想到什么?如果没有,你可以试试old.虽然,其他人可能会说它坚固,可靠和安全.而对于Oodles Blockchain来说,Java意味着"企业级". 毫无 ...

  9. 以太坊智能合约开发:Solidity 语言快速入门

    在本文中,我们从一个简单的智能合约样例出发,通过对智能合约源文件结构的剖析与介绍,使大家对Solidity语言有一个初步的认识.最后,我们将该智能合约样例在 Remix 合约编译器中编译.部署,观察其 ...

最新文章

  1. Tomcat内存溢出解决方法
  2. dropbear环境搭建
  3. HarmonyOS之sdkmgr命令的使用
  4. ucosii任务堆栈的作用是什么呢?
  5. JDBC是什么?和JDBC程序的基本编写
  6. mysql第四步安装失败_MySQL8.0版本的安装以及解决安装后MySQL服务无法启动的问题...
  7. 中专考的计算机一级b有用吗,白城计算机一级B资格证真实可查么
  8. 世界上最成熟、功能最全的加密库HELib
  9. CTF---Web入门第二题 上传绕过
  10. 工具:Wind金融终端使用指南
  11. 如何免费制作支付宝微信合并收款二维码?
  12. Mysql之注入工具-yellowcong
  13. 《望洞庭湖赠张丞相》 孟浩然
  14. HDU-5773 The All-purpose Zero(LIS变形)
  15. 元气骑士如何获得机器人成就皮肤_元气骑士:机器人成就皮肤该怎么获得?百场老机器人教你走位...
  16. 无线安全-WiFi渗透流程
  17. python爬虫影评_Python爬虫(二十)_动态爬取影评信息
  18. python练手小程序—调整图片分辨率(大小)
  19. linux io apic,linux-kernel – IO-APIC级别与PCI-MSI-X之间的差异
  20. unittest之TestSuite类详解

热门文章

  1. 8年软件测试从业者个人感悟
  2. 想让安卓app不再卡顿?看这篇文章就够了
  3. Jmeter生成html报告
  4. jmeter在linux上的使用
  5. 基于matlab蓝牙跳频系统,基于Matlab软件的蓝牙跳频改进算法
  6. Mastering OpenCV with Practical Computer Vision Projects
  7. 2018/03/08
  8. 【华为机试真题 C++】奥运会排行榜-100
  9. python爬取动态页面并保存_第十讲:Python爬取网页图片并保存到本地,包含次层页面...
  10. F5负载均衡器的功能介绍