使用GO语言在NEO私有链发行NEP-5 Token的开发指南
V刘晨曦
发表于 2022-12-2 15:25:23
89
0
0
开发语言
在NEO智能合约开发平台进行开发的优势之一是平台支持各种开发语言。
NEO推荐使用C#语言,不过它也支持使用Python, Java, Go, Ruby,之后还会进一步支持Kotlin, C/C++, JavaScript等开发语言。.! f* V( J- O; P" w# p2 S* N: c
尽管支持多种语言,但我们仍可以发现现有的很多项目使用的是C#、Python、Java,使用GO语言的并不多。因此,参考City of Zion (CoZ)上的资料,我想尝试写一篇关于使用GO语言开发的简单教程,希望能吸引更多使用GO语言的开发人员参与开发。" M9 a. A! x; K& R) |4 G- l. `
给GO开发人员的建议/ G* P6 _ |% F
无论你是编程新手还是经验丰富的开发人员,刚开始时都建议你在私有域或测试网上进行开发。/ X- c0 I* s# G2 F- @3 b8 Z
为什么?9 S8 _9 l O8 F" T3 Y
因为在主网上部署NEP-5 Token需要消耗490个GAS。
写这篇文章的时候(2018年9月15日),GAS的市场价格是5.8美元,那么该笔费用就高达2842美元。对于任何创业公司而言,这都是一笔不小的费用。
按照GAS的历史最高价,每个Token的价格为95.87美元,那么仅仅部署一次智能合约,你的成本就要增加4,7000美元。# D# D* F6 Z) r% [, O" Y0 n7 K( w/ U
因此,刚开始开发的时候,建议你在私有域或者测试网上操作,当你准备好之后,再转到主网上部署合约。
要求" j& K2 K2 J3 q% _3 _2 B. j
本教程中,开发环境的需求如下所示:- V' U5 J! N9 U3 `
操作系统 – 桌面版Ubuntu Desktop 18.04.1 LTS
Git 命令行接口 –Git
语言 – GO语言0 T8 P7 I7 L. {, m
Go语言依赖管理工具 – Dep
Docker –Docker CE 和 Docker Compose
编辑器 – Visual Studio Code, Extension: Go& ^6 e5 `5 w: p9 L9 h
使用到的NEO的资料1 ^& e- P6 n" `0 y. S; U9 ?
GO语言智能合约框架 – neo-storm
预建好的使用Python语言编写的neo-privnet-with-gas以及nep-scan镜像 – neo-scan-docker
重要提示:结果可能因NEO编译器和节点版本不同而有差异。8 _; l4 N. Q; p' n5 @2 d
本质上来说,有几种方法可以运行私有域,例如使用 neo-go 或者 neo-privatenet-docker。 但是,在本教程中,我们会使用slipo编写的 neo-scan-docker。 neo-scan-docker是用neo-python构建的,所以它带有一些“Python”组件。 此外,它还带有neo-scan的UI,允许您分析智能合约的部署事务。
*安装方法可能因操作系统而异。 相关的详细信息,请点击上面的链接查看。- n: G( v1 M/ q; o+ @6 a8 P5 |
配置你的环境
首先,我们先用 neo-scan-docker来配置一下NEO私有域。
1 检查一下Git, Docker and Docker Compose这些工具是否已经准备好。
richie@Redbuntu:~/Desktop$ sudo git --version O, s( Y I1 o7 Z
git version 2.17.1
richie@Redbuntu:~/Desktop$ sudo docker -v
Docker version 18.06.1-ce, build e68fc7a
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'...
remote: Counting objects: 27, done.
remote: Total 27 (delta 0), reused 0 (delta 0), pack-reused 27* M& ^* b, K. d6 `+ m* r1 ^
Unpacking objects: 100% (27/27), done.( q# M5 P7 _/ {7 V3 s) H# T
richie@Redbuntu:~/Desktop$ cd neo-scan-docker/1 x* R( m/ t* {# V4 L* o# f
richie@Redbuntu:~/Desktop/neo-scan-docker$ sudo docker-compose up
Starting neo-scan-docker_postgresql_1 ... done' |8 b4 p2 H+ W7 k& x" a8 [' d4 O
Starting neo-privnet ...: ?- E# J) W" N3 U6 K1 p
done
Starting neo-scan ...; G2 [9 H6 W( _/ b- G1 H0 y
done
Attaching to neo-scan-docker_postgresql_1, neo-privnet, neo-scan`
3在你的主机文件中,添加127.0.0.1 neo-privnet。注意:主机文件的位置可能因操作系统而异。
Unix/Linux/macOS - /etc/hosts( K. T3 m7 ^$ |9 [4 D: l
Windows - C:\Windows\System32\Drivers\etc\hosts`+ h5 e5 {! M. A/ r# u" A! T
4在浏览器中输入http://127.0.0.1:4000/,可以看到City of Zion (CoZ)提供的neo-scan网页界面。
( W0 _. ?* c% X6 {6 b! I
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'
这样你的NEO私有域和neo-scan就已经配置好了。
下一步,配置neo-storm。, Q1 _6 h% b* |7 Y8 r% O7 T9 y* T
1在终端中输入下面这几条命令, go version、dep version以及echo $GOPATH,确认一下Go, Dep, GOPATH都已经准备好。
richie@Redbuntu:~$ go version
go version go1.10.1 linux/amd64" d0 A" r1 R, V" f1 t
richie@Redbuntu:~$ dep version
dep:
version : devel
build date : ) G& \6 a' M7 F& r9 ?' u
git hash :
go version : go1.8.3! c! ?: e2 n+ K7 h2 Z" V$ k
go compiler : gc/ V6 K. I$ D Q& j
platform : linux/amd64; b( U6 r* K) k0 K; Y& O' `+ W
richie@Redbuntu:~$ echo $GOPATH' g, N, m6 C; I4 X, @# J' T4 n
/home/richie/go
2输入 go get命令获取neo-storm,输入dep命令检查依赖包,使用make install命令进行安装。 *忽略警告信息
richie@Redbuntu:~$ go get -u
github.com/CityOfZion/neo-storm, w0 Z: }5 ^% x7 N p* O7 c: E
package github.com/CityOfZion/neo-storm: no Go files in* g- O$ W& ~: n7 y: Y2 @
/home/richie/go/src/github.com/CityOfZion/neo-storm" c, q) j t% k3 \7 Q, ]
richie@Redbuntu:~$ cd $GOPATH/src/github.com/CityOfZion/neo-storm
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$ sudo dep ensure( J. {8 @ Z# _8 Q" F" k' l
-update
dep: WARNING: Unknown field in manifest: prune
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$ sudo make install
installing project dependencies. p- g+ x! V6 u- g7 A- n- `
dep: WARNING: Unknown field in manifest: prune
installing neo-storm framework
done installing, happy coding!9 X4 E* b$ ]1 c+ v4 P
3现在neo-storm已经安装好了,你可以测试一下。" |/ M. o: {5 E. y" ]' m
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$, Y$ p: ?' J4 F; n w4 ^5 E9 K
neo-storm( F) `2 x2 x/ x; S
NAME:1 h+ |+ w' {/ ~, S
neo-storm - Neo smart contract
framework for the Go programming language# c* X H/ s* h: g
USAGE:9 a2 H& j( I- ~. ^3 E3 a
neo-storm [global options] command[command options][arguments...]! ?1 m2 Q! m* u% _" V( h
VERSION:
0.0.0
COMMANDS:
compile compile a smart contract to an .avm file: E( S, F6 Q3 n$ }& [7 i# { o
testinvoke testinvoke a smart contract against a remote NEO RPC node6 S; {5 O3 ]: g( k1 Y
init initialize a new smart-contract in a directory with boiler plate code" ]( o) r/ R; c/ v1 ]4 R* T
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--help, -h show help
--version, -v print the version! h$ ^, z2 f& |0 e
4“安装完成,开心编码” ——接下来开始我们的第一个智能合约吧。% V' H P9 {8 U( ^$ _: n* K
richie@Redbuntu:~/Desktop$ cd ~/Desktop4 C$ _. f, P$ K8 N* r# q0 t
richie@Redbuntu:~/Desktop$ neo-storm init -n NeoStormTest
Successfully initialized smart contract [NeoStormTest]
richie@Redbuntu:~/Desktop$ cd NeoStormTest/% g& j7 l3 y; s: j& V6 {* `; B
richie@Redbuntu:~/Desktop/NeoStormTest$ ls6 R' N1 [: J' ^( c$ H# v! q
main.go
richie@Redbuntu:~/Desktop/NeoStormTest$ cat main.go
package NeoStormTest
import "github.com/CityOfZion/neo-storm/interop/runtime"
func Main(op string, args []interface{}) {' s# e& n: X+ `3 U
runtime.Notify("Hello world!")
发行NEP-5通证合约) V) {1 w+ x" Y* Y
1要在NEO上发行NEP-5通证,我们必须遵守它的通证标准。 *改进的NEP5可以在Github上查看,它允许Token上线NEX交易所。
NEP-5 Token Standard { r+ [1 J, H, ?
Methods
-totalSupply()
-name()
-symbol()
-decimals()* Q* }! s g* }, |3 W/ \
-balanceOf(account)
-transfer(from, to, amount)
Events
-transfer(from, to, amount)
NEP-5(.1) by NEX
Methods
-totalSupply()
-name()
-symbol()
-decimals()
-balanceOf(ctx, account)# y J1 |4 W) q4 G9 F3 s
-transfer(ctx, from, to, amount, callingScriptHash)
-transferFrom(ctx, from, to, amount)
-approve(ctx, owner, spender, amount, callingScriptHash)" {: A2 K ?; Y4 b6 Y# d
-allowance(ctx, owner, spender)( ?* W8 f0 Z" ?- H P: P
2不用重新编写一个Token合约,你可以fork/clone我的github仓库。
richie@Redbuntu:~/Desktop$ git clone https://github.com/maplerichie/neo-go-nep5 MyFirstNeoGoContract
3启动代码编辑器(我用的是Visual Studio Code),将~/Desktop/MyFirstNeoGoContract 添加到你的工作区(workspace)。Neo-storm的examples文件夹里也有例子,可以点击https://github.com/CityOfZion/neo-storm/tree/master/examples/token查看。' L& ~( f' Q* C$ X2 y
https://github.com/maplerichie/neo-go-nep5
4编辑package,修改NEP-5的属性值,例如decimals, multiplier, owner Address, Name, Symbol, TotalSupply。% Z( S: z; V) I9 g* F9 @7 z
Package:应该将package修改为 package MyFirstNeoGoContract ,从而与文件夹名称保持一致。7 v/ |9 h( |8 C. A
Decimals:用来设置Token使用的小数位数或者Token可被分割的最小单位。
例如:NEO的小数点位数是0,意味着它是不可分的Token。因此不能转账或者接收小数个NEO,只能是整数个。小数只能在交易所使用,因为它们创建了自己的十进制系统来方便交易。$ y* [ y0 x+ |6 Q# L3 L3 i
Multiplier:这给出了Decimals和TotalSupply相乘时的值。 输入格式为10 ^ Decimals。
例如: decimals = 6时,multiplier的值应该是10^6,即multiplier = 1000000。
Owner: Token发行者的地址。这里我们使用neo-privetenet的地址AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y。: n0 j5 U' q5 P7 Y' J
Name: 字符串格式的NEP-5Token的名称。
Symbol: NEP-5Token符号,通常是3个字符的长度,但不是必须的。
TotalSupply: 总发行量。设置一个总发行量可以防止通胀。
0 \0 ?3 q, u' M- g
5修改参数同时确保符合NEP-5Token标准。然后使用neo-storm来编译GO智能合约。8 F, }/ ^- J* ~! Y5 T9 d
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ neo-storm compile -i main.go -o main.avm1 x3 @! c4 _" S8 ~
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$ u0 q# [! r w
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS ! `% ? U7 }& F8 t7 o# H
NAMES3 s' a2 j! c6 F B5 p
69c60667835b slipoh/neo-scan "/bin/sh -c 'sleep
3…" 6 hours ago Up About a minute 0.0.0.0:4000->4000/tcp " Z6 X$ o8 @/ X
neo-scan- W6 \7 u5 b3 W8 r
88b358cdd8ff . v7 G/ j# a" }+ T y
cityofzion/neo-privatenet 9 U/ @9 f- \3 H' d2 I2 |7 s- i: {$ K
"/bin/bash /opt/run.…" 4 ^1 I9 M9 ^: @' P, l
6 hours ago Up About a
minute ' P8 A' f/ X) g y' w' h) q
0.0.0.0:20333-20336->20333-20336/tcp,4 E" g8 t) g+ Z; u0 O
0.0.0.0:30333-30336->30333-30336/tcp 7 E* }' ^( W1 d. [% w
neo-privnet. q4 S5 M0 J6 g9 t
ab96dc398c62 postgres:10.1
"docker-entrypoint.s…" 1 f4 u' ^' e' {& u
6 hours ago Up About a
minute 0.0.0.0:5432->5432/tcp 7 Z% m" P# m4 f: S
neo-scan-docker_postgresql_1* f! K0 O/ v5 A
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo docker cp main.avm
88b358cdd8ff:/neo-python
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo docker exec -it- ]9 Z& Q# `0 }
88b358cdd8ff /bin/bash
*共识节点运行在在screen sessions,使用’screen -ls’命令查看
*neo-python安装在/neo-python目录下,目录下带有a neo-privnet.wallet文件) i u# c0 S5 ^4 b6 l
*有问题可报告给:https://github.com/CityOfZion/neo-privatenet-docker$ x+ }& P% G" ]& ~! a
8在Docker上,打开neo-python-cli终端并使用密码coz解锁钱包。
root@88b358cdd8ff:/neo-python# neopy$ w6 }0 e3 e* t9 q6 R. m4 I; X
Privatenet useragent '/NEO:2.7.6/', nonce: 513759764' p+ `, A# Q& W9 U( O$ l1 H
[I 180914 10:34:09 LevelDBBlockchain:114] Created Blockchain DB at /root/.neopython/Chains/privnet, Q0 ~0 s7 r7 y" s. A) g# P# Z" \
[I 180914 10:34:09 NotificationDB:73] Created Notification DB At: l( e7 j" M( |, v- F$ M' {+ B
/root/.neopython/Chains/privnet_notif 1 Z% V$ V S L3 P! J
NEO cli. Type 'help' to get started
neo> open wallet neo-privnet.wallet
[password]> ***
Opened wallet at neo-privnet.wallet# q+ e, k% Y* y3 n0 h$ v; n
9部署合约main.avm前,使用neo-scan看一看钱包余额。6 g8 B: A& S! h: W3 ?
neo> wallet
[I 180914 11:01:22 UserWallet:538] Script hash
b'#\xba\'\x03\xc52c\xe8\xd6\xe5"\xdc2 39\xdc\xd8\xee\xe9' ! Q, _! d; R8 c, r' h
Used 0.357 Gas + X- ]5 ?3 ?* Z r% V& \
Used 0.357 Gas ; ]1 P) j$ E* t/ V
Wallet {
"path":
"neo-privnet.wallet",
"addresses": [* Y' X& \8 R% A) s0 q; l
{: A7 Q, T! g! D0 `# w* x' j
"version": 0,8 D3 d3 N0 `& ?. \
"script_hash":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",& A5 p. ~9 k, M0 H
"frozen": false,7 p0 O% L: c/ @( {
"votes": [],8 x* ~/ I8 g" Z& B# f
"balances": {
, [. N+ y% d' H, K/ p5 T% K
"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":0 R) e2 b* M) s+ M# ?1 m
"100000000.0",0 e! M9 `/ n/ s* w L
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":
"74589.9996"# c! Q P7 S, E; [7 W# A
},
"is_watch_only":
false,; R3 ?9 B0 O# I: R
"tokens": [# _; O( Q) |9 u
"[a3640dd3c560c75528e5f861da5da98958d0d713]
NXT2 : 2500000.00000000"
] Z" G7 p- J- p* f& m, h+ I" x
}
],; ~! S: k. P+ O. Q
"height": 10294,
"percent_synced": 100,
"synced_balances": [
"[NEO]: 100000000.0 ",
"[NEOGas]: 74589.9996
",; A9 D) w, h. ~0 K" _
"[NXT2]: 2500000 "% j4 ?5 A; Z; y4 L) c/ A7 [4 w
],
"public_keys": [
{$ `4 l! Q7 ]# k! o3 r3 ]
"Address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",
"Public Key":
"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"
}, y; j+ f, j" W5 e% v
],0 ~$ a _1 d/ ?+ C6 w8 x# F
"tokens": [
{
"name": "NEX
Template V2",
"symbol":
"NXT2",( r! D# ^ T9 E6 Q" ]
"decimals": 8,; h+ N. ^1 }. t* l$ Z% S) Z. D
"script_hash":8 k9 U6 ^" c9 u8 Y0 S
"0xa3640dd3c560c75528e5f861da5da98958d0d713",
"contract_address":/ [5 c* s8 Z' h2 i
"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"* n [$ O* e1 |' v( l% n
}) Z ~* x* _, u, o1 ?. v/ G
],3 t9 c0 S f0 e; U8 ?% N. h
"claims": {4 ~- F5 Z/ j1 M: I7 k+ t* R
"available":
"0.0",4 P" y4 E- R$ y! C* G* c
"unavailable":$ N, |4 Y4 D6 U0 D& l; g; ?" T) N
"7730.0"
}
}! H6 l# }. K3 F# k$ a
10看来可以开始部署了。再次提醒,钱包密码是coz。8 n: U8 t0 [1 K5 N M$ r
neo> import contract main.avm 0710 05 True False 9 X# ~1 S3 f) H! [+ {/ T( H
contract properties: 1
Please fill out the following contract details:
[Contract Name] > MyFirstNEOToken
[Contract Version] > 1.0
[Contract Author] > Richie5 X) o4 |6 D. m
[Contract Email] > babierichie@hotmail.com$ U7 \# f: M; j0 J8 M* F# s. h
[Contract Description] > First NEO Token8 J6 l8 ]1 z1 s+ P) T
Creating smart contract....
Name: MyFirstNEOToken
Version: 1.0
Author: Richie
Email: babierichie@hotmail.com + f7 e* V9 ~' L2 n" m B* s" ~
Description: First NEO Token + N/ o$ |. R8 W
Needs Storage: True
Needs Dynamic Invoke: False ' J" c+ E% X" C4 ^& l5 U
{0 f2 q" w. k y1 k& X1 c
"hash":/ K" P" X1 O4 I' T2 g
"0x4e9b87c96158a8e2cc4b74794f727b38947e9862",
"script": "...",
"parameters":
"0710",
"returntype":
"05"
}) x+ x$ n" b p, A! K
Used 500.0 Gas
-------------------------------------------------------------------------------------------------------------------------------------
Test deploy invoke successful9 d; T6 h$ _+ J; ]4 g" R3 S, v5 T
Total operations executed: 11 # u" p( A6 r( u
Results:
[]. S' |2 ~& N9 Q$ F& j- v# ?0 Y
Deploy Invoke TX GAS cost: 490.0
Deploy Invoke TX Fee: 0.0 : v" Q- L; x$ }: @% J! C
-------------------------------------------------------------------------------------------------------------------------------------1 q7 M0 g/ o: L$ z' B( K- F, \
Enter your password to continue and deploy this contract) S4 Q: }* c* o9 r/ S7 l
[password]> ***
[I 180914 11:03:33 Transaction:613] Verifying transaction: b'9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114'
Relayed Tx: 9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114# v, L! i O2 c, L9 Q
11使用给定的哈希值验证交易。 注意:不同机器的哈希值是不一样的。9 Y" D- n) \; @; t
neo> tx/ b. `# [ j; Q$ ~
9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114
{9 k5 F% v4 r$ C. f7 _. g
"txid": "0x9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114",
"type":
"InvocationTransaction",1 t, v5 W1 s' s" c5 d# d/ {
"version": 1,4 |. H9 @' y/ X# J9 i6 g
"attributes": [],- {5 [5 w/ v: `4 T) w
"vout": [
{
"n": 0,
"asset":
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",) R. ^+ [% y6 d* }
"value":% \# }/ l' x- N {) B1 ^& J
"25493.9997",
"address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"
}
],2 A S0 e% z# v) u. Q
"vin": [# x N i& K8 S; p& J
{' [6 J% P' E7 q# ?' T
"txid":6 F# b% ^/ V0 `) ]% J. v
"475a091ccaa6330320a29884f5f8796a260bdba91352dd409d16787b37d8be26",
"vout": 0+ i- ?7 J0 z8 }
}
],
"sys_fee":1 ^" w- @# @) B$ s7 q) h
"4.9e-06",
"net_fee":; i8 d$ p1 k7 U2 {
"489.9999951",
"scripts": [6 C: l+ z3 l6 E) z8 k O
{5 D& R8 p: y2 p
"invocation":* Z& _% u T- A7 p+ ~
"40510fa6630ef581108057ebe967cd306522466a32eaf068cf3717da1e640b866246c013033e3c878ebf9247a5a3500178b21b126b3af63ed07a86b0d2c4f34c89",* r3 J# n) y+ n
"verification":
"21031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4aac"
}
],8 }% }$ A. {' e& g# Z8 w2 t& _% G
"script": "...",7 s' }1 m, K1 O$ H7 F. H) K! {6 L
"gas": 49000000000,
"height": 10302, @. g$ }& [' _$ Z, S! f
"unspents": [3 w* O P: {. M* s9 L
{
"n": 0,
"asset":
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",
"value":
"25493.9997",
"address":; e6 w5 g* O6 e$ W7 U
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"0 A$ T3 J9 v3 _ o
}
]
}
12交易显示后,再次查看钱包余额。 在步骤9,我们的GAS余额为74589.9996,现在,GAS余额变为74099.9996。 因为这减少的490个 GAS已用于合约部署!7 x" G* ?* e3 H' q3 c' v$ e+ C9 B, H, w
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
Used 0.357 Gas
Wallet {
"path":
"neo-privnet.wallet",
"addresses": [, [" M7 @" L2 J( R6 M: \
{: p4 W1 P5 v2 j/ Y. u
"version": 0,
"script_hash":) @3 k0 i7 I) J+ X/ T9 \
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",8 n' S- s/ k0 N% o9 U! b8 d8 L2 l
"frozen": false,6 {7 O& K" w3 E8 W8 \) n4 k
"votes": [],4 S" U+ C0 g2 I( M; Q9 o
"balances": {, @/ P% f2 f" ?5 J
"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":( A8 }2 |) M* z8 ]5 U
"100000000.0",
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7": U+ f# M: r$ s9 S
"74099.9995"
},* x4 l% ?$ |8 v+ {6 y n
"is_watch_only":
false,
"tokens": [- B+ K& x0 }5 |, [
/ z4 ?# t$ V9 Q% X( ?
"[a3640dd3c560c75528e5f861da5da98958d0d713] NXT2 : i1 p3 z$ e1 N+ `; d/ C+ o5 U
2500000.00000000"
]/ P$ T; J) d/ D8 C
}' C8 p; A2 Q6 z, H
],$ Y4 x; }" @' j1 W
"height": 10348,
"percent_synced": 100,* |5 ]" Y W- B1 N
"synced_balances": [
"[NEO]: 100000000.0 ",
"[NEOGas]: 48605.9999
",' S/ H% [, K: T# b& Y
"[NXT2]: 2500000 "
],& W, O' P8 j9 Y1 K5 r [) @
"public_keys": [
{
"Address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",' p$ o/ S- f, }
"Public Key": s5 K. X0 a" F6 i0 S2 L
"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"4 P/ L/ O6 [& `& ~
}
],
"tokens": [' X, H9 s5 r+ ?, Z' I& R
{
"name": "NEX
Template V2",+ ?; w8 a/ @8 I
"symbol": "NXT2",
"decimals": 8,$ L# j2 s: g6 e3 C3 M1 e' \- q
"script_hash":
"0xa3640dd3c560c75528e5f861da5da98958d0d713",2 V* e: Z7 G; I0 E
"contract_address":
"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"- ~; c; B. [/ D0 A- y; L
}
],3 n+ V7 |, N6 Z* N" K6 d
"claims": {& N0 u/ ~6 n9 w- q
"available":
"0.0",
"unavailable": "8652.0"
}0 z }% \- Z5 J5 G+ h: f9 z
}
我们也可以看一看部署好的合约。
neo> contract search My1 _2 ?0 z, Z( z& E' k5 @; `! b
Found 1 results for My* s8 p! d# k; r! Z
{
"version": 0,
"code": {4 g( H* m$ j' c/ ^" E
"hash": "0x4e9b87c96158a8e2cc4b74794f727b38947e9862",
"script": "...",5 z: E2 Z, C7 W
"parameters": "0710",: C+ s3 U0 a/ O4 i5 ]1 ]
"returntype": 5
},
"name": "MyFirstNEOToken",& T* ~/ g8 }6 M8 l, Y1 ^% h
"code_version": "1.0",
"author": "Richie",
"email": "babierichie@hotmail.com",2 k1 A9 m* R! C: z4 S! q( u
"description": "First NEO Token", U% ?. s% A6 a& N1 u; \+ y9 F( w- q
"properties": {
"storage": true,
"dynamic_invoke": false+ w; d6 g: |2 d8 y, J+ o& z
}
}$ F5 g1 c! ~; _1 m
13最后,我们可以尝试使用钱包的密码coz,来调用这个带有合约哈希值的Token。
neo> testinvoke8 ?+ i$ D+ A% E0 `: Q/ S0 a' H
0x4e9b87c96158a8e2cc4b74794f727b38947e9862 deploy [] k2 R3 T4 j S9 W `. X
好了,现在你已经在NEO的私有域上成功的发行了NEP-5Token。: o6 h8 ?' y' N4 J& {, W. c# E
最后
希望对于Gophers来说,能很轻松地照着本教程学习。也希望GO开发人员能加入 NEO’s Discord,一起开发学习。你一定要试一试!
如果您真的需要我的帮助,请在Discord上联系我(LikKee.Richie#5647)
成为第一个吐槽的人