以太坊智能合约Hello World示例程序

简介

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

开发环境

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

第一步

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

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

1026414-20160929214942594-525384825.png

第二步

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

personal.newAccount()

1026414-20160929215009422-1666848460.png

第三步

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

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

1026414-20160929215024578-1399628109.png

第四步

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

geth attach

1026414-20160929215033344-975080828.png

第五步

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

eth.getBalance(eth.accounts[0])

1026414-20160929215043641-2081129944.png

第六步

使用智能合约的在线编译器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}
}

1026414-20160929215059078-403129775.png

第七步

编译器生成的代码如下

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')命令将用户解锁.

1026414-20160929215115438-2012101948.png

第十步

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

1026414-20160929215124156-109863329.png

第十一步

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

1026414-20160929215138266-419826991.png

总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java到LDAP教程(包括如何安装LDAP服务器/客户端)

本教程将向您展示如何编写Java代码以与LDAP交互。 但是在执行此操作之前,我们需要在计算机上设置LDAP服务器和客户端。 如果此时您不确定到底是什么LDAP,建议您参考这篇文章,其中提供了一个很好的定义示例。 (简而言之&#xff0…

在linux下赋予000权限,【linux】对于文件权限的理解

本篇博文旨在介绍linux下的权限问题;介绍了Linux下,查看权限、修改权限等方法;并通过分别在超级用户(root)和普通用户下进行测试,探索不同等级的用户进入目录需要的权限,以及进入后,显示和创建文件需要的权…

手把手教你制作简易计算器

实现过程&#xff1a; HTMLCssJS 具体通过标签实现计算器整个的框架 通过Css样式实现计算器页面布局及框架优化 通过JavaScript算法实现计算器计算过程 次实验过程&#xff1a; 背景图片背景音乐&#xff08;看个人意愿加&#xff01;&#xff09; 安排&#xff1a; <!--HT…

安装tron_具有Tron效果的JavaFX 2 Form

安装tron这是一个具有TRON效果的简单JavaFX登录表单。 在此示例中&#xff0c;我使用CSS设置TextField和Button的样式。 这是CSS和Effect代码的片段&#xff1a; .text-field{-fx-background-color: transparent;-fx-border-color: #00CCFF;-fx-text-fill: white; }.password-f…

在Spring 4.2中更简单地处理异步事务绑定事件

介绍 如您可能已经知道的&#xff08;例如&#xff0c;从我以前的博客文章中 &#xff09;&#xff0c;不再需要创建一个单独的类&#xff0c;该类使用onApplicationEvent方法实现ApplicationListener以便能够对应用程序事件做出响应&#xff08;包括来自Spring Framework本身和…

linux chattr 无权限,从零开始学习Linux(二十八):文件权限之chattr权限

1、chattr命令命令格式&#xff1a; chattr [-] [选项] 文件名或者目录名&#xff1b;参数说明&#xff1a;&#xff1a;增加权限&#xff1b;-&#xff1a;删除权限&#xff1b; 等于某权限&#xff1b;选项说明&#xff1a;i&#xff1a;如果对文件设置i属性&#xff0c;则不…

初等数论及其应用——中国剩余定理

在线性代数中&#xff0c;我们用高斯消元解决多元的线性方程组&#xff0c;而在数论中&#xff0c;面对一元变量的线性模方程组&#xff0c;我们利用中国剩余定理去求解x。 转载于:https://www.cnblogs.com/rhythmic/p/5928483.html

linux c 11 运行库,11.1.3 运行库与I/O

11.1.3 运行库与I/O在了解了glibc和MSVC的入口函数的基本思路之后&#xff0c;让我们来深入了解各个初始化部分的具体实现。但在具体了解初始化之前&#xff0c;我们要先了解一个重要的概念&#xff1a;I/O。IO(或I/O)的全称是Input/Output&#xff0c;即输入和输出。对于计算…

linux windows 丢失,Win10预览版9879硬盘丢失的Linux解决方案

IT之家讯 12月3日消息&#xff0c;最近IT之家论坛网友九仙仙总结了Win10预览版9879硬盘问题的解决方法&#xff0c;并在论坛中发布出来。经测试&#xff0c;此为快速有效的解决方法&#xff0c;故公之于众供朋友们参考。以下为作者原文。开头说明两点&#xff1a;1、这是我个人…

Android开发——Android系统启动以及APK安装、启动过程

0. 前言 从Android手机打开开关&#xff0c;到我们可以使用其中的app时&#xff0c;这个启动过程到底是怎么样的&#xff1f;1. 系统上电当给Android系统上电&#xff0c;在电源接通的瞬间&#xff0c;CPU内的寄存器和各引脚均会被置为初始状态&#xff0c;CPU复位之后&#…

linux生成文件清单,Linux 获取文件名称生成列表 txt - create_filelist

Linux 获取文件名称生成列表 txt - create_filelist1. find/home/strong/MOTChallenge/MOT16/MOT16/train/MOT16-04/img1/ 文件夹下所有 *.jpg (000001.jpg - 001050.jpg) 的路径 图片名信息写入 txt 文件。1.1 llstrongforeverstrong:~/MOTChallenge/MOT16/MOT16/train/MOT16…

jvm线程分析命令_JVM:如何分析线程转储

jvm线程分析命令本文将教您如何分析JVM线程转储&#xff0c;并查明问题的根本原因。 以我的观点&#xff0c;线程转储分析是掌握Java EE生产支持的任何个人最重要的技能。 您可以从线程转储快照中获取的信息量通常远远超出您的想象。 我的目标是与您分享我在过去10年中积累的有…

[na]华为acl(traffic-filter)和dhcp管理

这个是财务网络的一个问题, 要求财务的某台机器能访问其他部门区的打印机. 其他部门是不能访问到财务网络的. 华为alc配置实例:-traffic-filter # 在VLAN100上配置基于ACL的报文过滤&#xff0c;允许源IP地址为192.168.0.2/32的报文通过&#xff0c;丢弃其他报文。 <HUAWEI&…

在linux中dns不安装coching,ubuntu 8.04下openldap的安装和使用

ubuntu 8.04上openldap的安装和使用1、安装openldap。$ sudo apt-get install slapd ldap-utils2、配置openldap。$ sudo /etc/ldap/slapd.conf需要修改的有以下4处。# The base of your directory in database #1# 域名前缀suffix "dcpeercoaching,dccn"# …

信息系统开发内容

1.按照用于质量管理的能力成熟度模型&#xff08;CMM&#xff09;描述系统开发过程的动机。 2.区分系统生命周期和系统开发方法 3.描述系统开发的10个基本原理 4.定义问题、机会和指示——系统开发项目的能力 5.描述用于把问题、机会和指示进行分类的PIECES框架 6.描述系统开发…

Linux怎么更改声音板卡顺序,51CTO博客-专业IT技术博客创作平台-技术成就梦想

SUN M8000主机 IOU板卡硬件更换一、故障现象1.日志分析XSCF> showstatus*IOU#0 Status:Degraded;XSCF> showlogs -v errorDate: May 24 20:44:22 CST 2019 Code: 80002000-33010000-0167058a00000000Status: Alarm Occurred: May 24 20:44:20.367 C…

设计模式的Java 8 Lambda表达式–命令设计模式

在本博客中&#xff0c;我将说明如何使用Java 8 Lambda表达式以函数式编程方式实现命令模式 。 命令模式的目的是将请求封装为对象&#xff0c;从而为具有不同请求&#xff0c;队列或日志请求的客户端参数化&#xff0c;并支持相应的操作。 命令模式是一种编写通用代码的方法&a…

凝思linux系统显卡设置,TaiShan服务器安装凝思操作系统Linx6.0.90并设置独立显卡WX2100输出...

TaiShan服务器安装凝思操作系统Linx6.0.90并设置独立显卡WX2100输出环境准备&#xff1a;TaiShan 2280服务器&#xff0c;凝思操作系统Linx6.0.90 arm64&#xff0c;WX2100显卡&#xff0c;WX2100显卡固件和驱动安装包第1步&#xff0c;上电服务器&#xff0c;登录BMC输入用户名…

JMeter3.0_插件管理

JMeter Plugins 一直以来&#xff0c;JMeter Plugins为我们提供了很多高价值的JMeter插件&#xff0c;比如: 用于服务器性能监视的PerfMon Metrics Collector用于建立压力变化模型的Stepping Thread Group用于Json解析的JSON Path Extractor用于展示响应时间曲线的Response Tim…

JavaWeb总结(四)

使用Servlet发送服务器端响应信息 Servlet API中定义一个专门的接口类javax.servlet.http.HttpServletResponse用于创建HTTP响应&#xff0c;包括HTTP协议的状态行、响应头以及消息体&#xff1b; HTTP响应示例 设置响应状态行 - 状态行分为HTTP协议、状态码和状态描述三个部分…