简介

以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链(BlockChain)平台. 本文介绍了一个简单的以太坊智能合约的开发过程.

开发环境

在以太坊上开发应用,首先需要安装其客户端,本文使用基于Go语言的Geth, 其官网为https://github.com/ethereum/go-ethereum.

第一步

在命令行环境中输入以下命令, 连接到以太坊测试网络

geth --testnet --fast --cache=512 console

第二步

在Geth提示符下输入以下代码, 创建一个用户并设置密码

personal.newAccount()

第三步

在Geth提示符下输入以下代码, 确认新用户的账户余额为0, 并开始"挖矿"(mine)

eth.getBalance(eth.accounts[0])
miner.start()

第四步

新开一个命令行窗口并输入以下命令, 将这个窗口连接到正在挖矿的窗口

geth attach

第五步

在Geth提示符下输入以下代码, 确认新用户的账户余额有所增长

eth.getBalance(eth.accounts[0])

第六步

使用智能合约的在线编译器https://ethereum.github.io/browser-solidity/编译以下代码

contract HelloWorld
{address creator;string greeting;function HelloWorld(string _greeting) public{creator = msg.sender;greeting = _greeting;}function greet() constant returns (string){return greeting;}function setGreeting(string _newgreeting){greeting = _newgreeting;}/**********Standard kill() function to recover funds**********/function kill(){if (msg.sender == creator)suicide(creator);  // kills this contract and sends remaining funds back to creator}
}

第七步

编译器生成的代码如下

var _greeting = /* var of type string here */ ;
var helloworldContract = web3.eth.contract([{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newgreeting","type":"string"}],"name":"setGreeting","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"type":"constructor"}]);
var helloworld = helloworldContract.new(_greeting,{from: web3.eth.accounts[0],data: '606060405260405161044e38038061044e833981016040528080518201919060200150505b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009e57805160ff19168380011785556100cf565b828001600101855582156100cf579182015b828111156100ce5782518260005055916020019190600101906100b0565b5b5090506100fa91906100dc565b808211156100f657600081815060009055506001016100dc565b5090565b50505b506103428061010c6000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806341c0e1b514610052578063a413686214610066578063cfae3217146100c15761004d565b610002565b34610002576100646004805050610141565b005b34610002576100bf6004808035906020019082018035906020019191908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509090919050506101d5565b005b34610002576100d36004805050610286565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156101335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101d257600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b8060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061022457805160ff1916838001178555610255565b82800160010185558215610255579182015b82811115610254578251826000505591602001919060010190610236565b5b5090506102809190610262565b8082111561027c5760008181506000905550600101610262565b5090565b50505b50565b602060405190810160405280600081526020015060016000508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103335780601f1061030857610100808354040283529160200191610333565b820191906000526020600020905b81548152906001019060200180831161031657829003601f168201915b5050505050905061033f565b9056',gas: 4700000}, function (e, contract){console.log(e, contract);if (typeof contract.address !== 'undefined') {console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);}})

第八步

修改编译器生成的代码, 设置显示的字符串以及减少费用(gas)

var _greeting = "Hello World" ;
gas: 300000

第九步

将修改完的代码复制到第四步的窗口中, 如果出现Error: account is locked undefined错误的话, 则使用personal.unlockAccount(eth.accounts[0], 'password')命令将用户解锁.

第十步

等候一段时间之后, geth窗口就会出现Contract mined! address..., 表明合约代码发布成功

第十一步

使用helloworld.greet()命令来运行该合约

总结

本文介绍了一个简单的以太坊智能合约的开发过程.

转载于:https://www.cnblogs.com/huyouhengbc/p/5922093.html

以太坊智能合约Hello World示例程序相关推荐

  1. 以太坊智能合约Demo

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战demo示例快速入门,用demo例 ...

  2. 用Visual Studio开发以太坊智能合约

    2019独角兽企业重金招聘Python工程师标准>>> 区块链和以太坊 自从我熟悉区块链.以太坊和智能合约以来,一直失眠. 我一直在阅读,阅读和阅读,最后我能够使用一些工具,他们建议 ...

  3. 教程 | 以太坊智能合约编程之菜鸟教程

    教程 | 以太坊智能合约编程之菜鸟教程 译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队.如果您想要获取更多及时信息,可以访问ConsenSys首页点击左下 ...

  4. 以太坊智能合约安全 Dasp Top10

    译者:爱上平顶⼭ 来源:慢雾区 原文链接:https://www.dasp.co/ 这是分布式应⽤安全项⽬(或DASP)2018 年排名前10的漏洞第⼀次迭代 该项⽬是NCC集团的⼀项举措.这是⼀个开 ...

  5. 以太坊智能合约编程之带菜鸟入门教程

    手把手带你走上智能合约编程之路 译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队.如果您想要获取更多及时信息,可以访问ConsenSys首页点击左下角New ...

  6. 以太坊智能合约编程之菜鸟教程

    手把手带你走上智能合约编程之路 译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队.如果您想要获取更多及时信息,可以访问ConsenSys首页点击左下角New ...

  7. 以太坊智能合约之如何执行智能合约?

    区块链技术在顶级技术中占据主导地位的主要原因在于其去中心化.虽然区块链的主要目的是在没有中心的情况下维护交易记录,但为了实现自动化,智能合约被引入.那么在写完智能合约之后呢?在本文的这个以太坊智能合约 ...

  8. 以太坊智能合约编程简单教程(全)

    有些人说以太坊太难对付,于是我们(译注:指Consensys, 下同)写了这篇文章来帮助大家学习如何利用以太坊编写智能合约和应用.这里所用到的工具,钱包,应用程序以及整个生态系统仍处于开发状态,它们将 ...

  9. 以太坊智能合约中随机数预测

    一.前言 作为首次币发行(ICO)的平台,以太坊已经获得了极大的普及. 但是,它不仅仅用于 ERC20 通证,轮盘,彩票和纸牌游戏都可以使用以太坊区块链实现. 与任何区块链实施一样,以太坊是不可逆的, ...

最新文章

  1. 翻转矩阵(数组右移问题)
  2. 设计模式之组合模式(Composite)摘录
  3. intel 82579v驱动下载_最新INTEL和AMD平台轻松安装WIN7,集成M.2和USB3.0驱动
  4. $(document).ready()和window.onload的区别
  5. matlab 多个波段,MatLab读取ENVI图像统计多波段图像信息
  6. 小白自学深度学习——目录
  7. 收集计算机网络经典的面试题
  8. 4245: KI的斐波那契 递归
  9. php stream encoding,PHP之mb_check_encoding使用方法分享
  10. javascript让firefox支持innerText
  11. AttributeError: module ‘torch.onnx‘ has no attribute ‘set_training‘
  12. 9008刷机教程oppo_OPPO手机解锁教程
  13. 谢逸计算机网络,第一届中国计算机实践教育学术会议在南京成功举办
  14. java刮刮乐_大众学开发——59秒学习编写刮刮乐游戏
  15. 当按下Alt-F4时阻止关闭Outlook,使其最小化(翻译)
  16. 第一章 绪论 思维导图
  17. 微分,不定积分,定积分的简单理解
  18. 区别主要在于服务器对带宽的分配:
  19. 深入理解Android:卷II
  20. 华为交换机基础学习命令(ensp)

热门文章

  1. php如何在类的外部修改成员属性,php中如何在外部修改类的私有或受保护属性值...
  2. openfire消息通知推送_APP消息推送功能之前端后台设计
  3. 老司机找BUG指南,赶紧拿走。。
  4. java与html关联_java-如何在HTML文件中搜索某些标签?
  5. bfc是什么_全面分析总结BFC原理及实践
  6. mysql中如何卸载插件_Eclipse中如何卸载插件
  7. 净迁移人口预测程序python_高质量深度学习模型, 一键模型预测,迁移学习很简单...
  8. 光纤收发器怎么连接?
  9. 哪些原因会导致rs485转换器信号受干扰?
  10. 【渝粤题库】国家开放大学2021春1121健康教育与健康促进题目