智能合约部署及调用
链客,专为开发者而生,有问必答!
此文章来自链客区块链技术问答社区,未经允许拒绝转载。
智能合约部署及调用
以太坊区块链技术2.0版本对于行业应用的开发最主要特性就是实现了智能合约,本质上讲智能合约是由事件驱动的、具有状态的、运行在一个复制的、分享的账本之上的、且能够保管账本上资产的程序。它是一个可以被信任,总是按照事先的规则执行的操作。但与此同时,智能合约部署完之后无法修改也会带来其他问题,这是另一个议题。下面直接上干货。本篇内容是基于go客户端通过命令行完成智能合约的编写、发布、调用。可参考的项目地址:http://www.ethdocs.org/en/latest/contracts-and-transactions/contracts.html1、安装solidity智能合约开发语言
[plain] view plain copy
brew tap ethereum/ethereum
brew install solidity
which solc
2、打开命令行,进入之前创建的私链,并设置日志输出文件
[plain] view plain copy
jwter-WIFI:csdnBlog jwter$ geth --datadir “privateChain” console 2>> log_output
Welcome to the Geth JavaScript console!
instance: Geth/v1.4.18-stable-c72f5459/darwin/go1.7.3
coinbase: 0x56a957bbde2b2dcb6321c9aceb11c21d6dfe68f9
at block: 164 (Sat, 03 Dec 2016 16:29:24 CST)
datadir: privateChain
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
3、设置编译环境
[plain] view plain copy
web3.eth.getCompilers()
[“Solidity”]
admin.setSolc("/usr/local/bin/solc")
"solc, the solidity compiler commandline interface\nVersion: 0.4.2+commit.af6afb04.Darwin.appleclang
\n\npath: /usr/local/bin/solc"
4、编写智能合约并编译
[plain] view plain copy
contractSource = “contract test { function multiply(uint a) returns(uint d) { return a * 7; } }”
“contract test { function multiply(uint a) returns(uint d) { return a * 7; } }”
contract = eth.compile.solidity(contractSource).test
{
code: "0x606060405260308060106000396000f3606060405260e060020a6000350463c6888fa18114601c575b6002565b3
46002576007600435026060908152602090f3",
info: {
abiDefinition: [{ constant: false, inputs: [...], name: "multiply", outputs: [...], payable: false, type: "function" }], compilerOptions: "--bin --abi --userdoc --devdoc --add-std --optimize -o /var/folders/c6/
1vhz7hcd7w9g883rwrn4vzvr0000gn/T/solc271136546",
compilerVersion: "0.4.2", developerDoc: { methods: {} }, language: "Solidity", languageVersion: "0.4.2", source: "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }", userDoc: { methods: {} }
}
}
单源编译器输出会给出你合约对象,每个都代表一个单独的合约。eth.compile.solidity 的实际返还值是合约名字到合约对象的映射。由于合约名字是test,eth.compile.solidity(source).test会给出包含下列领域的测试合约对:
Code 编译的以太坊虚拟机字节代码
Info 从编译器输出的额外元数据
Source 源代码
Language 合约语言 (Solidity,Serpent,LLL)
LanguageVersion 合约语言版本
compilerVersion 用于编译这个合约的solidity编译器版本。
abiDefinition 应用的二进制界面定义
userDoc 用户的NatSpec Doc。
developerDoc 开发者的NatSpec Doc。
编译器输出的直接结构化(到code和info)反映了两种非常不同的部署路径。编译的以太坊虚拟机代码和一个合约创建交易被发送到区块,剩下的(info)在理想状态下会存活在去中心化云上,公开验证的元数据则执行区块链上的代码。
如果你的源包含多个合约,输出会包括每个合约一个入口,对应的合约信息对象可以用作为属性名称的合约名字检索到。你可以通过检测当前的GlobalRegistrar代码来试一下:
contracts = eth.compile.solidity(globalRegistrarSrc)
5、定义智能合约abi并编译
[plain] view plain copy
abi = [{constant:false , inputs:{name:‘a’,type:‘uint256’}}]
[{
constant: false, inputs: { name: "a", type: "uint256" }
}]
myabi = eth.contract(abi)
6、部署前准备:解锁账户、监控日志文件
[plain] view plain copy
accountAddress = eth.accounts[0]
“0x56a957bbde2b2dcb6321c9aceb11c21d6dfe68f9”
personal.unlockAccount(accountAddress)
Unlock account 0x56a957bbde2b2dcb6321c9aceb11c21d6dfe68f9
Passphrase:
true
监控日志文件需新开窗口,执行以下命令。用于查看部署完的智能合约是否被同步到区块链网路中
[plain] view plain copy
jwter-WIFI:csdnBlog jwter$ tail -f log_output
7、部署智能合约
[plain] view plain copy
myContract = myabi.new({from:accountAddress,data:contract.code})
{
abi: [{
constant: false, inputs: { name: "a", type: "uint256" }
}],
address: undefined,
transactionHash: “0xf330f4affd3989d72a979410e3a53f3a4d2d4d832faaa6c1bb32f72998acbd4b”
}
8、查看部署状态,并同步到区块链中智能合约必须开始挖矿模式才是被同步到区块链中 可根据监控日志窗口可以看到交易是否执行,来决定何时执行miner.stop()
[plain] view plain copy
txpool.status
{
pending: 1,
queued: 0
}
miner.start()
true
miner.stop()
true
txpool.status
{
pending: 0,
queued: 0
}
9、调用智能合约
[plain] view plain copy
contractABI = eth.contract(contract.info.abiDefinition)
testContract = contractABI.at(myContract.address)
{
abi: [{
constant: false, inputs: [{...}], name: "multiply", outputs: [{...}], payable: false, type: "function"
}],
address: “0xcb0895d4b3b35b2a45a31fab853614c14e7759a4”,
transactionHash: null,
allEvents: function(),
multiply: function()
}
testContract.multiply.call(3)
21
注意:记得保存智能合约部署完的地址,以及abi参数,因为部署完之后无法修改,
忘记地址则无法再次调用,同时部署智能合约会消耗gas,完成后可观察用户的余额是否变化。
相关文章:

POP到指定的界面
int index (int)[[self.navigationController viewControllers]indexOfObject:self]; [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:(index -2)] animated:YES];

js markdown chart flow
http://knsv.github.io/mermaid/#example-of-a-marked-renderer转载于:https://www.cnblogs.com/studyNT/p/5584399.html

使用Remix编译和部署以太坊智能合约
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 使用Remix编译和部署以太坊智能合约 Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络…

Java之Array(数组)说明
代码说明: 1 package array;2 3 import java.util.ArrayList;4 import java.util.Arrays;5 import java.util.List;6 7 /**8 * Array使用说明:9 * 内容: 10 * 1、Array实例化; 11 * 2、Array与ArrayList转换; 12 …

创建操作/删除多行数据的UITableView的细节
首先注意需要重写-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 这里需要注意的是返回的结果应该是 return UITableViewCel…

每天进步一点点——Linux
http://blog.csdn.net/cywosp/article/category/443566/1转载于:https://www.cnblogs.com/zengkefu/p/5586780.html

用Go 构建一个区块链 -- Part 5: 地址
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 比特币地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是史上第一个比特币地址,据说属于…

iOS 9 适配系列教程
转自:http://www.cocoachina.com/ios/20150703/12392.html 本文是投稿文章,作者:ChenYilong(https://github.com/ChenYilong/iOS9AdaptationTips) Demo1_iOS9网络适配_改用更安全的HTTPS iOS9把所有的http请求都改为ht…

AutoMocker单元测试
/// <summary>/// 测试获取所有物流/// </summary>[TestMethod]public void TestExpressController(){var Expresss new List<Express> { new Express{Code"01",Name"测试物流"}}.AsQueryable();var mocker new AutoMocker();mocker.U…

CSS.text不被选中
1、 text{-moz-user-select: none; /*火狐*/-webkit-user-select: none; /*webkit浏览器*/-ms-user-select: none; /*IE10*/-khtml-user-select: none; /*早期浏览器*/-o-user-select: none; /* Opera*/user-select: none;} 2、user-select - CSS3参考手册.html(htt…

一个Solidity源文件的布局
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 源文件可以包含任意数量的合约定义,include指令和pragma伪指令。 Pragma 版本 源文件可以(并且应该)使…

iOS 数字滚动 类似于老 - 虎- 机的效果
效果图 具体实现代码如下 ZCWScrollNumView.h文件 #import <UIKit/UIKit.h>typedef enum {ZCWScrollNumAnimationTypeNone,ZCWScrollNumAnimationTypeNormal,ZCWScrollNumAnimationTypeFromLast,ZCWScrollNumAnimationTypeRand,ZCWScrollNumAnimationTypeFast } ZCWScro…

序列化模块--json模块--pickle模块-shelve模块
什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传播到远程,因为硬盘或网络传输时只能接受bytes 例: 把内存数据 转成字符 # data {# roles:[# {role:monster,type:pip,life:5…

UITextView添加占位字符
#import "YGTextView.h"#define kPlaceholderDefaultTopMargin 4 // Placeholder上下间距#define kPlaceholderDefaultLeftMargin 5 // Placeholder左右间距implementation YGTextView#pragma mark - 初始化PlaceholderTextView- (instancetype)initWithFrame…

手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 学习目标 了解智能合约 简单环境搭建 能够利用solidity编写Hello World合约 合约部署 和合约互动 使用solidity语言撰写智能合约 …

洛谷P3159 [CQOI2012]交换棋子
巧妙的拆点方式,首先把1看成黑点,0看成空的,几次交换就可以看成一条路径 1)从容量上看,这条路径为1-2-2-2-2-2-……-2-1 2)从费用上看,这条路径每条边费用都是1 于是用一种巧妙的拆点方式&#…

趣谈iOS运行时的方法调用原理
一个成熟的计算机语言必然有丰富的体系,复杂的容错机制,处理逻辑以及判断逻辑。但这些复杂的逻辑都是围绕一个主线丰富和展开的,所以在学习计算机语言的时候,先掌握核心,然后了解其原理,明白程序语言设计的…

GCD实现倒计时
__block int timeout59; //倒计时时间dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_source_t _timer dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);dispatch_source_set_timer(_timer,dispatch_wall…

Solidity基础入门知识(十)函数的访问权限和可见性
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 下面来继续介绍作为一个分布式网络语言所特有的internal和external这两种不同的函数调用方式,以及Solidity提供的对函数调用时的…

Sass (Syntactically Awesome StyleSheets)
Sass (Syntactically Awesome StyleSheets) Sass 是对 CSS 的扩展,让 CSS 语言更强大、优雅。 它允许你使用变量、嵌套规则、 mixins、导入等众多功能, 并且完全兼容 CSS 语法。 Sass 有助于保持大型样式表结构良好, 同时也让你能够快速开始小…

键盘的相关设置
一、键盘风格 UIKit框架支持8种风格键盘。 typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapable, // 支持ASCII的默认键盘 UIKeyboardTypeNumbersAndPunctuation, // 标准电…

python全栈开发基础【第十七篇】面向对象反射和内置方法
一、静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直…

区块链笔记分享
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链笔记分享:技术和数学基础: 高位的hash的逆向过程除了穷举,没有更有效的办法,这个过程在目前的计算能力下必然…

BZOJ4766: 文艺计算姬
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 737 Solved: 402[Submit][Status][Discuss]Description "奋战三星期,造台计算机"。小W响应号召,花了三星期造了台文艺计算姬。文艺计算姬比普通计算机有更多的艺术细胞。普通计算机能计算一个…

Android调用远程Service的参数和返回值都需要实现Parcelable接口
import android.os.Parcel;import android.os.Parcelable; public class Person implements Parcelable{ private Integer id; private String name; private String pass; public Person() { super(); } public Person(Integer id, String name, …

git的简单命令
git init 初始化管理库 git add file_name 将文件添加到文件管理库 git commit -m “xxx” 将文件提交到文件管理库(xxx:说明文字) git status 查看当前状态 git diff 查看文件改动的地方 git log 查看历史版本提交记录(如果觉…

区块链概念:Hash 算法
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链概念1:Hash 算法 作用在学习哈希算法前,我们需要知道哈希在区块链的作用哈希算法的作用如下:区块…

java 文件操作
文件操作——File File表示目录信息 listFiles方法 File的listFiles方法用于返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。其方法定义: File[] listFiles()返回值:抽象路径名数组,这些路径名表示此抽象路径名表示的…

三维等值面提取算法(Dual Contouring)
上一篇介绍了Marching Cubes算法,Marching Cubes算法是三维重建算法中的经典算法,算法主要思想是检测与等值面相交的体素单元并计算交点的坐标,然后对不同的相交情况利用查找表在体素单元内构建相应的网格拓扑关系。Marching Cubes算法简单&a…

设置status bar的颜色
statusBar显示电池电量、时间、网络部分标示的颜色只能设置两种颜色: 默认的黑色(UIStatusBarStyleDefault)白色(UIStatusBarStyleLightContent) 配置info.plist文件 1.View controller-based status bar appearance…