使用GO语言在NEO私有链发行NEP-5 Token的开发指南
V刘晨曦
发表于 2022-12-2 15:25:23
94
0
0
开发语言& B* w2 N' k% V& t6 U# j
在NEO智能合约开发平台进行开发的优势之一是平台支持各种开发语言。& t$ h0 M4 _# [& q$ v& c5 T T
NEO推荐使用C#语言,不过它也支持使用Python, Java, Go, Ruby,之后还会进一步支持Kotlin, C/C++, JavaScript等开发语言。.# I. d! s/ W! y- t
尽管支持多种语言,但我们仍可以发现现有的很多项目使用的是C#、Python、Java,使用GO语言的并不多。因此,参考City of Zion (CoZ)上的资料,我想尝试写一篇关于使用GO语言开发的简单教程,希望能吸引更多使用GO语言的开发人员参与开发。. ]$ }" V- F7 f3 i
给GO开发人员的建议9 [ c0 k. y8 x# C+ D( z# T. s
无论你是编程新手还是经验丰富的开发人员,刚开始时都建议你在私有域或测试网上进行开发。
为什么?! s, @2 J k1 ]* Y
因为在主网上部署NEP-5 Token需要消耗490个GAS。
写这篇文章的时候(2018年9月15日),GAS的市场价格是5.8美元,那么该笔费用就高达2842美元。对于任何创业公司而言,这都是一笔不小的费用。
按照GAS的历史最高价,每个Token的价格为95.87美元,那么仅仅部署一次智能合约,你的成本就要增加4,7000美元。( ]) a3 R3 K! K" ]
因此,刚开始开发的时候,建议你在私有域或者测试网上操作,当你准备好之后,再转到主网上部署合约。
要求3 M: L( r/ b$ v0 G
本教程中,开发环境的需求如下所示:" B( o3 a2 ?+ Z/ J0 O4 [
操作系统 – 桌面版Ubuntu Desktop 18.04.1 LTS
Git 命令行接口 –Git
语言 – GO语言
Go语言依赖管理工具 – Dep
Docker –Docker CE 和 Docker Compose$ V. K5 n; J% w% k7 M3 Y# V2 t6 U3 g- w) Y
编辑器 – Visual Studio Code, Extension: Go2 Q" p/ X2 z1 M- b/ m
使用到的NEO的资料6 y8 e* |: x+ }. o5 [' v
GO语言智能合约框架 – neo-storm
预建好的使用Python语言编写的neo-privnet-with-gas以及nep-scan镜像 – neo-scan-docker
重要提示:结果可能因NEO编译器和节点版本不同而有差异。8 H# m' _2 U* a; W; G4 B( k, U
本质上来说,有几种方法可以运行私有域,例如使用 neo-go 或者 neo-privatenet-docker。 但是,在本教程中,我们会使用slipo编写的 neo-scan-docker。 neo-scan-docker是用neo-python构建的,所以它带有一些“Python”组件。 此外,它还带有neo-scan的UI,允许您分析智能合约的部署事务。" k, r9 ~# A! L3 A1 ^1 E' r
*安装方法可能因操作系统而异。 相关的详细信息,请点击上面的链接查看。; b: j& N5 `, |; b: P; V; P
配置你的环境
首先,我们先用 neo-scan-docker来配置一下NEO私有域。# G+ l ~0 B9 t* U0 }
1 检查一下Git, Docker and Docker Compose这些工具是否已经准备好。2 F2 `! ?8 S1 O1 f b$ _
richie@Redbuntu:~/Desktop$ sudo git --version0 m4 v. F, ^5 H$ b1 ^0 z/ X
git version 2.17.1
richie@Redbuntu:~/Desktop$ sudo docker -v. |! v" M8 W' d h. w! p3 V9 ?
Docker version 18.06.1-ce, build e68fc7a- Z$ `7 O. i) [% U3 O H
richie@Redbuntu:~/Desktop$ sudo docker-compose -v
docker-compose version 1.22.0, build f46880fe
2克隆(Clone) slipo的 neo-scan-docker仓库代码,并使用 docker-compose来加载Docker镜像。 下载镜像可能需要点时间,请耐心等待done状态的出现。
richie@Redbuntu:~/Desktop$ git clone https://github.com/slipo/neo-scan-docker.git
Cloning into 'neo-scan-docker'...0 G& Q; i' u _6 g: ~) D& }) r
remote: Counting objects: 27, done.$ x( J: g1 Z1 h4 o7 ]7 @
remote: Total 27 (delta 0), reused 0 (delta 0), pack-reused 27
Unpacking objects: 100% (27/27), done.
richie@Redbuntu:~/Desktop$ cd neo-scan-docker/
richie@Redbuntu:~/Desktop/neo-scan-docker$ sudo docker-compose up; h0 y. U0 q) K
Starting neo-scan-docker_postgresql_1 ... done
Starting neo-privnet ...
done
Starting neo-scan ...
done
Attaching to neo-scan-docker_postgresql_1, neo-privnet, neo-scan`
3在你的主机文件中,添加127.0.0.1 neo-privnet。注意:主机文件的位置可能因操作系统而异。2 x0 ^3 ^; J4 ^1 d& `$ \* Z& b5 z
Unix/Linux/macOS - /etc/hosts4 W/ G$ @* t$ b! J. X
Windows - C:\Windows\System32\Drivers\etc\hosts`8 m0 Y" N C: Q& H4 `
4在浏览器中输入http://127.0.0.1:4000/,可以看到City of Zion (CoZ)提供的neo-scan网页界面。
5点击钱包地址(Wallet Addresses),你可以看到预存有NEO和GAS的钱包地址。部署智能合约的时候我们需要使用到这些Token。更多信息,可以查看 neo-privatenet 。
导入WIF密钥可以获取预存有NEO和GAS的钱包的密钥。 私钥/WIF 密钥 KxDgvEKzgSBPPfuVfw67oPQBSjidEiqTHURKSDL1R7yGaGYAeYnr 地址: AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y 脚本哈希值 (用于检查): b'#\xba\'\x03\xc52c\xe8\xd6\xe5"\xdc2 39\xdc\xd8\xee\xe9' u& D) n( a9 {4 P
这样你的NEO私有域和neo-scan就已经配置好了。
下一步,配置neo-storm。
1在终端中输入下面这几条命令, go version、dep version以及echo $GOPATH,确认一下Go, Dep, GOPATH都已经准备好。" b! ~' J5 l3 R% T' O
richie@Redbuntu:~$ go version! T7 Q2 ^+ U. b
go version go1.10.1 linux/amd64% B: n% O X% ^6 ~% S. i
richie@Redbuntu:~$ dep version
dep:
version : devel& C% e) d1 y8 u
build date : 6 d s: C+ J) \
git hash : ( p7 o# t( _4 f/ Y
go version : go1.8.3/ I8 K3 @# G( \
go compiler : gc
platform : linux/amd64
richie@Redbuntu:~$ echo $GOPATH
/home/richie/go {% C3 @5 ^8 v, l$ E& [6 J
2输入 go get命令获取neo-storm,输入dep命令检查依赖包,使用make install命令进行安装。 *忽略警告信息. t2 S2 I5 R: _
richie@Redbuntu:~$ go get -u1 q; {2 l: _ j5 ~6 u+ U1 f
github.com/CityOfZion/neo-storm. _; a( ~9 t6 Y: V4 F
package github.com/CityOfZion/neo-storm: no Go files in
/home/richie/go/src/github.com/CityOfZion/neo-storm, N# z7 r8 ?+ P+ r8 p, z
richie@Redbuntu:~$ cd $GOPATH/src/github.com/CityOfZion/neo-storm2 A, P! F" w( ^0 u# I- h
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$ sudo dep ensure
-update4 |7 Q$ V2 @; m( z; k" O5 ]
dep: WARNING: Unknown field in manifest: prune
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$ sudo make install! l4 c# e1 R9 V% L
installing project dependencies
dep: WARNING: Unknown field in manifest: prune2 w* C' a1 P x$ s$ _2 d
installing neo-storm framework E. V7 S, ~0 F9 M
done installing, happy coding!6 C: f, j3 i4 A
3现在neo-storm已经安装好了,你可以测试一下。
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$
neo-storm5 B* @8 l2 n: ]: S; z
NAME:
neo-storm - Neo smart contract- u7 s4 {& Z, J0 e( ^( t
framework for the Go programming language$ P0 v$ j; C3 i; R
USAGE:
neo-storm [global options] command[command options][arguments...]) ]$ T: V6 L! s0 l% O- ^" `
VERSION:/ C, P8 g9 E, P; z# z2 @3 o. a
0.0.0" t2 ]- V: X( G
COMMANDS:$ w- Y- F7 k R! \( V3 L: r
compile compile a smart contract to an .avm file
testinvoke testinvoke a smart contract against a remote NEO RPC node
init initialize a new smart-contract in a directory with boiler plate code) z: f" s& Z- h8 y$ g: Z# j
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:+ E6 @* R' P; W- t! k, N- U3 e+ [2 z
--help, -h show help& [" o+ Q* C# ~( n' Q. ?$ @( t& ~
--version, -v print the version
4“安装完成,开心编码” ——接下来开始我们的第一个智能合约吧。
richie@Redbuntu:~/Desktop$ cd ~/Desktop
richie@Redbuntu:~/Desktop$ neo-storm init -n NeoStormTest; O! Y( t& l" w# V4 y* v( k7 z& K- i
Successfully initialized smart contract [NeoStormTest]
richie@Redbuntu:~/Desktop$ cd NeoStormTest/7 E2 r5 [. {* M" W9 B( K
richie@Redbuntu:~/Desktop/NeoStormTest$ ls
main.go z; Q$ f) m; ~, f3 |7 D
richie@Redbuntu:~/Desktop/NeoStormTest$ cat main.go
package NeoStormTest
import "github.com/CityOfZion/neo-storm/interop/runtime"* Z- _$ z! @" ~# B# X
func Main(op string, args []interface{}) {# w% Y' G* w- q! {/ k4 V. t9 H5 m
runtime.Notify("Hello world!")
发行NEP-5通证合约
1要在NEO上发行NEP-5通证,我们必须遵守它的通证标准。 *改进的NEP5可以在Github上查看,它允许Token上线NEX交易所。5 U7 c! V5 _! v8 d: L5 i
NEP-5 Token Standard
Methods
-totalSupply()
-name()+ f9 g, v8 U- T, f' F; A
-symbol()
-decimals()0 F! p: P0 w( h: |( X
-balanceOf(account)
-transfer(from, to, amount)
Events- E T" A" v' _2 B
-transfer(from, to, amount)# ^, \3 }$ u% x2 T
NEP-5(.1) by NEX3 T) j! {* p5 @! Y/ S. o
Methods
-totalSupply()
-name()$ s) O+ w* v! a+ v* R$ G# S
-symbol()& ]1 p5 s6 g- L
-decimals()
-balanceOf(ctx, account)+ A% \; j. M. G1 y- B
-transfer(ctx, from, to, amount, callingScriptHash); _8 [; B9 V' M5 b8 ]2 V
-transferFrom(ctx, from, to, amount)
-approve(ctx, owner, spender, amount, callingScriptHash)/ S8 N6 w: v3 N
-allowance(ctx, owner, spender)
2不用重新编写一个Token合约,你可以fork/clone我的github仓库。' p% @0 N" Y T q
richie@Redbuntu:~/Desktop$ git clone https://github.com/maplerichie/neo-go-nep5 MyFirstNeoGoContract$ P; ]8 m5 l8 w, J
3启动代码编辑器(我用的是Visual Studio Code),将~/Desktop/MyFirstNeoGoContract 添加到你的工作区(workspace)。Neo-storm的examples文件夹里也有例子,可以点击https://github.com/CityOfZion/neo-storm/tree/master/examples/token查看。
https://github.com/maplerichie/neo-go-nep5 d g" F/ |) v2 ?7 c. W
4编辑package,修改NEP-5的属性值,例如decimals, multiplier, owner Address, Name, Symbol, TotalSupply。
Package:应该将package修改为 package MyFirstNeoGoContract ,从而与文件夹名称保持一致。
Decimals:用来设置Token使用的小数位数或者Token可被分割的最小单位。
例如:NEO的小数点位数是0,意味着它是不可分的Token。因此不能转账或者接收小数个NEO,只能是整数个。小数只能在交易所使用,因为它们创建了自己的十进制系统来方便交易。
Multiplier:这给出了Decimals和TotalSupply相乘时的值。 输入格式为10 ^ Decimals。
例如: decimals = 6时,multiplier的值应该是10^6,即multiplier = 1000000。
Owner: Token发行者的地址。这里我们使用neo-privetenet的地址AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y。1 }, q7 x) J; q6 j" B$ ~
Name: 字符串格式的NEP-5Token的名称。4 p/ u; s/ A$ Z7 u
Symbol: NEP-5Token符号,通常是3个字符的长度,但不是必须的。 F4 e$ D0 a! c9 ]* \2 i. Y' G) K
TotalSupply: 总发行量。设置一个总发行量可以防止通胀。9 y, @! P- m9 t! ?1 z& `
4 U" o+ u& e5 L5 U, o* H- M
5修改参数同时确保符合NEP-5Token标准。然后使用neo-storm来编译GO智能合约。/ y8 } L/ d/ B( B: p1 o
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ neo-storm compile -i main.go -o main.avm
6当前目录下你可以看到 main.avm文件。现在neo-storm不会运行检查NEP-5Token标准。我的经验是缺少owner Address信息时,会显示错误信息。
7现在讲NEP-5合约部署到Privatenet Docker。这么做之前我们需要先获取Privatenet Docker ID值,然后在主机上复制main.avm文件并粘贴进Privatenet Docker镜像中,然后将它附加到运行的Docker中。
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES f6 N8 ^! V, S" C7 j" |
69c60667835b slipoh/neo-scan "/bin/sh -c 'sleep! a1 C3 [, X" X+ m5 C
3…" 6 hours ago Up About a minute 0.0.0.0:4000->4000/tcp . _1 W* m; z% O
neo-scan
88b358cdd8ff
cityofzion/neo-privatenet
"/bin/bash /opt/run.…"
6 hours ago Up About a! q. [2 c# w/ ?) L
minute ; p! j/ C, R5 N: j: i' g4 f' \
0.0.0.0:20333-20336->20333-20336/tcp,
0.0.0.0:30333-30336->30333-30336/tcp
neo-privnet
ab96dc398c62 postgres:10.1 & ~% y) C; Q2 ]7 ?- t
"docker-entrypoint.s…"
6 hours ago Up About a [; R' l8 @! R9 g: l+ Y% x
minute 0.0.0.0:5432->5432/tcp 1 D- L# l d1 w( Z
neo-scan-docker_postgresql_14 P" _' u5 V# S+ m+ J0 o
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo docker cp main.avm/ P* |, _4 ]0 C `
88b358cdd8ff:/neo-python" Y! ^; _# Q% [
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo docker exec -it! O2 W8 X+ v: f
88b358cdd8ff /bin/bash
*共识节点运行在在screen sessions,使用’screen -ls’命令查看; p" ^( m* D; z5 a5 p- \
*neo-python安装在/neo-python目录下,目录下带有a neo-privnet.wallet文件5 u, R: v/ ` h7 c# b; m' Z
*有问题可报告给:https://github.com/CityOfZion/neo-privatenet-docker/ I* @& H/ U( F+ I7 {2 c# c
8在Docker上,打开neo-python-cli终端并使用密码coz解锁钱包。
root@88b358cdd8ff:/neo-python# neopy& Z! y8 R" o) l
Privatenet useragent '/NEO:2.7.6/', nonce: 513759764" u0 X. q* S% p; j9 D
[I 180914 10:34:09 LevelDBBlockchain:114] Created Blockchain DB at /root/.neopython/Chains/privnet; j8 \5 i/ z% N
[I 180914 10:34:09 NotificationDB:73] Created Notification DB At; T! ~! J8 p+ o9 x/ F, o( C% w B
/root/.neopython/Chains/privnet_notif
NEO cli. Type 'help' to get started
neo> open wallet neo-privnet.wallet6 Q; ? l; b7 C E
[password]> ***
Opened wallet at neo-privnet.wallet/ Y' h, h: Z6 s5 _8 j9 L
9部署合约main.avm前,使用neo-scan看一看钱包余额。8 r0 U1 {+ g1 ?4 U
neo> wallet
[I 180914 11:01:22 UserWallet:538] Script hash8 p' g0 J, [1 y0 I2 A2 N
b'#\xba\'\x03\xc52c\xe8\xd6\xe5"\xdc2 39\xdc\xd8\xee\xe9'
Used 0.357 Gas % b+ Z P3 f4 b- }. W- N
Used 0.357 Gas
Wallet {
"path":- E2 ?3 F7 d5 h5 J
"neo-privnet.wallet",
"addresses": [" G5 L0 f! j! X# B) M
{1 h( V7 S: V/ w/ O E& L: W
"version": 0,
"script_hash":% L- j7 `$ J$ t$ W8 r. A1 ~2 P
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",- X4 F9 a2 V8 R1 ~# U
"frozen": false,
"votes": [],
"balances": {
"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":
"100000000.0", m2 d8 N& P# {' J3 l1 v' B: A
* e$ m" r; f6 }" V
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":; b5 c7 v) s# [' f4 v
"74589.9996", j3 {' c, W& V3 s8 e
},
"is_watch_only":
false,
"tokens": [9 C) n% p' w( ^' H# v
"[a3640dd3c560c75528e5f861da5da98958d0d713]. O, x0 ]/ c# J1 |
NXT2 : 2500000.00000000" K+ v8 a7 c. W3 U, {
]6 T* T: x* p0 a. {. f& u1 D! w
}4 l5 l1 ~, \" u% {& A
],
"height": 10294,5 N: x T% R. `2 A% h
"percent_synced": 100,
"synced_balances": [/ k& M% b3 ^0 c( ?8 C; Y5 g- g F
"[NEO]: 100000000.0 ",
"[NEOGas]: 74589.9996
",
"[NXT2]: 2500000 "5 f9 F9 q, N' x: ^! W+ I
],1 p( j3 q* X0 [1 x/ |- T& S
"public_keys": [+ o* v" I, u( Q1 q D3 Y3 P
{' {; |0 U# d8 c3 N
"Address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",
"Public Key":
"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"
}% L, ]$ J7 x% r, b6 E
],5 ~( R" A! M7 n- W% ^
"tokens": [0 x, U+ f5 {, g8 u$ C9 W
{
"name": "NEX
Template V2",
"symbol":
"NXT2",
"decimals": 8,
"script_hash":
"0xa3640dd3c560c75528e5f861da5da98958d0d713",
"contract_address":7 A8 I) e% @7 ^- |
"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"
}7 w$ A8 x7 k/ Q C
],& E. C! @- j3 f$ D, P
"claims": {
"available":. E- N4 Q& [7 o
"0.0",
"unavailable":
"7730.0"
}( y' W8 K4 @2 h/ V5 m( Q
}
10看来可以开始部署了。再次提醒,钱包密码是coz。$ n9 Y" k" b4 f; B2 L* T; A
neo> import contract main.avm 0710 05 True False / a# g3 G4 B+ I1 r8 v; N
contract properties: 16 k) X, ]9 h# k r( D
Please fill out the following contract details:; @2 d1 h5 _; J
[Contract Name] > MyFirstNEOToken+ T/ X. a+ m; B! D2 q
[Contract Version] > 1.0: G# S4 K! Z/ I
[Contract Author] > Richie5 q8 U" v3 G/ O8 Y
[Contract Email] > babierichie@hotmail.com5 ` U4 K* l3 Z) B4 m3 i2 O0 X4 E9 o
[Contract Description] > First NEO Token: z6 T2 h8 E- T+ b% n
Creating smart contract....
Name: MyFirstNEOToken
Version: 1.0. K+ l7 x- O+ l n; a
Author: Richie 8 q4 G) C H' R
Email: babierichie@hotmail.com
Description: First NEO Token
Needs Storage: True ! I5 {4 f( b# x: ]4 B m
Needs Dynamic Invoke: False ) }5 s2 v6 H1 i4 X
{2 P. X6 l- C- Z4 P2 E8 C v
"hash":/ D+ \$ W2 R9 \' u. v8 P2 B7 Q
"0x4e9b87c96158a8e2cc4b74794f727b38947e9862",
"script": "...",* b% N+ {. E" b! ]% W9 Y
"parameters":$ D7 i0 n+ o- e" D
"0710",
"returntype":3 z- p9 @. R1 ]
"05"+ C; \5 {. {( U: }
}
Used 500.0 Gas
-------------------------------------------------------------------------------------------------------------------------------------
Test deploy invoke successful, i8 z. x9 v* n( B3 Y5 `& f' ^
Total operations executed: 11 8 D K& n- k" K' I* \9 {- U
Results:
[]9 |* i! V& e: M
Deploy Invoke TX GAS cost: 490.0 G% Y: Q; p! G
Deploy Invoke TX Fee: 0.0
-------------------------------------------------------------------------------------------------------------------------------------. u+ l& W2 C1 k$ V( F$ R$ ?
Enter your password to continue and deploy this contract$ a3 x! U$ B: e3 H5 {" s. D
[password]> ***3 ]5 B$ |1 |+ n7 H1 O
[I 180914 11:03:33 Transaction:613] Verifying transaction: b'9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114'
Relayed Tx: 9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114
11使用给定的哈希值验证交易。 注意:不同机器的哈希值是不一样的。& t( X, V7 j) X: r6 ~" H
neo> tx
9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114
{
"txid": "0x9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114",- |; V& K( C/ C* v& Z5 Z
"type":% z8 y; @6 U: P, b4 \' C
"InvocationTransaction",
"version": 1,: a8 b$ ]9 ^0 N0 b1 g; s7 q+ B
"attributes": [], c: a5 d6 C0 H1 P+ E
"vout": [
{( Z$ D1 [+ r' {) F9 V
"n": 0,+ a8 c) T( T2 ]# ]: r, }# q3 k
"asset":# T) K7 s; I, n: `; T
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",
"value":8 i: h/ m, B8 G' g( N! a
"25493.9997",
"address":9 E; _; `2 x$ s- d" D, g* [
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"$ t- |. [% `1 Y# R5 E, Y# O
}9 H( `; T) e/ q9 _8 y/ s
],7 _' \' S; C! C; [% J' H# I
"vin": [1 t" @& Q9 v$ P. u6 V
{: z, p0 Y0 q7 Z& `
"txid":' ^& F8 ^* ^- Y; F
"475a091ccaa6330320a29884f5f8796a260bdba91352dd409d16787b37d8be26",; P! C- j* a8 b ~! U! m% ?1 V
"vout": 0/ Q$ i0 v: z, a- y( V) G0 U6 Q' r
}
],5 J5 T2 U% {; p' J! c! ?7 h7 n# t
"sys_fee":
"4.9e-06",
"net_fee":% Q2 I( x) e$ `, u' v
"489.9999951",
"scripts": [
{7 l8 C# Z1 w; v# @5 H1 F! Z
"invocation":
"40510fa6630ef581108057ebe967cd306522466a32eaf068cf3717da1e640b866246c013033e3c878ebf9247a5a3500178b21b126b3af63ed07a86b0d2c4f34c89",( a$ s0 q$ E \+ j
"verification":
"21031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4aac"; Q9 |$ f) }9 f9 E, ]( {: m
}
],
"script": "...",
"gas": 49000000000,% `2 W( N8 e) t2 {9 I9 e# u
"height": 10302," i2 x6 A) L3 N+ }
"unspents": [$ d* ?$ q6 `7 O8 Y' c- o
{
"n": 0,
"asset":2 E- Z- j0 w9 a
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",
"value":4 q' _2 a# ]( d! Y: L5 K: ]
"25493.9997",7 I2 W% D* c5 z1 W7 P$ n2 _9 W
"address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"# t' J8 C% C, X
}
]' ] Y# o! ]. M, | k6 K3 _2 s
}
12交易显示后,再次查看钱包余额。 在步骤9,我们的GAS余额为74589.9996,现在,GAS余额变为74099.9996。 因为这减少的490个 GAS已用于合约部署!
neo> wallet
[I 180914 11:18:38 UserWallet:538] Script hash
b'#\xba\'\x03\xc52c\xe8\xd6\xe5"\xdc2 39\xdc\xd8\xee\xe9'
Used 0.357 Gas 8 o+ s# X( o- {# [
Used 0.357 Gas
Wallet {
"path":
"neo-privnet.wallet",
"addresses": [0 U/ I7 Y) E0 X+ U. Q
{
"version": 0,
"script_hash":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",- f* L$ A0 n$ O- q- d( n' _; i: c7 x
"frozen": false,
"votes": [],% y- B) m# q8 z. y0 ]( y1 n3 e
"balances": {" z$ l7 ?1 z4 N9 L' L0 @
! G6 |" T" |; b6 w, e7 h
"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":( }. s- Y+ x, S
"100000000.0",/ r2 e2 u( M4 ~- ~6 L
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":
"74099.9995"
},' w R) U3 ]' S% [
"is_watch_only":, S$ n' V5 g0 j4 P$ R
false,6 d i* u5 F$ M. l- B" _
"tokens": [, L5 |- o' j( ^$ p1 e. p% N
) u$ ^! n( c, N7 i& W6 W& r1 Q
"[a3640dd3c560c75528e5f861da5da98958d0d713] NXT2 :
2500000.00000000"
]
}
],
"height": 10348,; }! f2 {7 e) R' b2 C
"percent_synced": 100,
"synced_balances": [
"[NEO]: 100000000.0 ",
"[NEOGas]: 48605.9999 `) _" q, o5 K6 l7 b/ `$ h
",
"[NXT2]: 2500000 "
],
"public_keys": [* D0 L, }' }3 J% ]8 H
{; W4 Q* h( p) I8 ]3 _
"Address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",( M C2 f. M3 v+ a! d
"Public Key":- \5 P, ]6 U- j5 a, I4 H
"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"
}
],# k0 M1 u' S9 j; |0 s/ v
"tokens": [8 V) {( X, H @" A
{
"name": "NEX
Template V2",
"symbol": "NXT2",
"decimals": 8,
"script_hash":" [3 f5 T* H4 a5 ]1 b. M, r
"0xa3640dd3c560c75528e5f861da5da98958d0d713",* _( }- t- T* }, K* j9 y- n
"contract_address":- k- V- p' F6 T& |: T" j
"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"2 n s7 |- B& e: D* I% U' h; A
}" h4 @# ^7 H3 a+ A
],
"claims": {
"available":0 {+ h& j( @/ ]# u; P
"0.0",
"unavailable": "8652.0"; L8 O0 x9 V; | }
}$ u& z& M$ s: f$ _& h5 v$ s4 {, a
}( ?+ X5 [/ [7 a( d& ?; @6 j
我们也可以看一看部署好的合约。* a/ r0 B3 p* ~4 I% ~
neo> contract search My0 B3 `, Q+ B! i& g P
Found 1 results for My
{
"version": 0,+ [& ^9 e E9 i" X' X
"code": {
"hash": "0x4e9b87c96158a8e2cc4b74794f727b38947e9862",2 H& \+ x6 _% u. t H( Z
"script": "...",6 }, g0 T8 [% r8 q/ x
"parameters": "0710",/ B! W& w( S; H s/ W
"returntype": 5
},
"name": "MyFirstNEOToken",7 N8 I' P. A4 S, B/ W% B6 u
"code_version": "1.0",9 S) L6 I% b9 M7 x j
"author": "Richie",$ ?2 {% z& h5 O4 F8 b4 o$ G
"email": "babierichie@hotmail.com",
"description": "First NEO Token",/ s" d. O. Z" v7 \( y/ n
"properties": {
"storage": true,4 P' i7 \0 i% Y
"dynamic_invoke": false
}' o3 M; W; c- ?
}+ E9 U3 }2 V0 e9 E0 t7 {. S
13最后,我们可以尝试使用钱包的密码coz,来调用这个带有合约哈希值的Token。! b; R' n; Z- _3 k
neo> testinvoke
0x4e9b87c96158a8e2cc4b74794f727b38947e9862 deploy []" B2 P, b- [8 J0 S B7 ?
好了,现在你已经在NEO的私有域上成功的发行了NEP-5Token。7 v, i3 K% e) y, k0 N
最后/ x' A8 c8 z2 I* X0 w# l$ ?
希望对于Gophers来说,能很轻松地照着本教程学习。也希望GO开发人员能加入 NEO’s Discord,一起开发学习。你一定要试一试!5 C: j/ {, D) y, R6 O
如果您真的需要我的帮助,请在Discord上联系我(LikKee.Richie#5647)
成为第一个吐槽的人