使用GO语言在NEO私有链发行NEP-5 Token的开发指南
V刘晨曦
发表于 2022-12-2 15:25:23
137
0
0
开发语言3 q* r, O' k5 d5 G: d
在NEO智能合约开发平台进行开发的优势之一是平台支持各种开发语言。/ H9 Q! z: k# D v& v5 q3 f
NEO推荐使用C#语言,不过它也支持使用Python, Java, Go, Ruby,之后还会进一步支持Kotlin, C/C++, JavaScript等开发语言。.
尽管支持多种语言,但我们仍可以发现现有的很多项目使用的是C#、Python、Java,使用GO语言的并不多。因此,参考City of Zion (CoZ)上的资料,我想尝试写一篇关于使用GO语言开发的简单教程,希望能吸引更多使用GO语言的开发人员参与开发。0 a8 Y* G; v4 o
给GO开发人员的建议
无论你是编程新手还是经验丰富的开发人员,刚开始时都建议你在私有域或测试网上进行开发。! F; p/ U# x9 g8 _. D% q
为什么?- r1 W2 P! u- `2 m/ y$ q
因为在主网上部署NEP-5 Token需要消耗490个GAS。" V) ]' X+ M0 L, \; e! ?& H: R
写这篇文章的时候(2018年9月15日),GAS的市场价格是5.8美元,那么该笔费用就高达2842美元。对于任何创业公司而言,这都是一笔不小的费用。2 |1 N6 `9 M9 c: n
按照GAS的历史最高价,每个Token的价格为95.87美元,那么仅仅部署一次智能合约,你的成本就要增加4,7000美元。
因此,刚开始开发的时候,建议你在私有域或者测试网上操作,当你准备好之后,再转到主网上部署合约。+ i! |8 r% _) M# Q1 c* `7 Q5 j
要求
本教程中,开发环境的需求如下所示:
操作系统 – 桌面版Ubuntu Desktop 18.04.1 LTS
Git 命令行接口 –Git g& G x& C5 k% L ~
语言 – GO语言9 t: k0 B5 }6 v8 H& w
Go语言依赖管理工具 – Dep
Docker –Docker CE 和 Docker Compose
编辑器 – Visual Studio Code, Extension: Go
使用到的NEO的资料
GO语言智能合约框架 – neo-storm* A. v1 ~) f" z4 Q9 B- ?
预建好的使用Python语言编写的neo-privnet-with-gas以及nep-scan镜像 – neo-scan-docker, I$ w* l8 i' u" W& o. S, Z
重要提示:结果可能因NEO编译器和节点版本不同而有差异。
本质上来说,有几种方法可以运行私有域,例如使用 neo-go 或者 neo-privatenet-docker。 但是,在本教程中,我们会使用slipo编写的 neo-scan-docker。 neo-scan-docker是用neo-python构建的,所以它带有一些“Python”组件。 此外,它还带有neo-scan的UI,允许您分析智能合约的部署事务。
*安装方法可能因操作系统而异。 相关的详细信息,请点击上面的链接查看。/ E. N J* I$ E7 @' A6 ^) Z% j, |
配置你的环境 N6 V6 a. A8 s$ X! L
首先,我们先用 neo-scan-docker来配置一下NEO私有域。
1 检查一下Git, Docker and Docker Compose这些工具是否已经准备好。. T! M% F' P d* |6 ]& ]1 H) ^
richie@Redbuntu:~/Desktop$ sudo git --version# [3 u9 ^- A! Y( c
git version 2.17.1$ S# }" h2 a. M) O; s4 R6 X
richie@Redbuntu:~/Desktop$ sudo docker -v; P6 [0 C& F8 J4 @
Docker version 18.06.1-ce, build e68fc7a
richie@Redbuntu:~/Desktop$ sudo docker-compose -v, [/ D+ e0 b* n; s2 N4 f6 Y+ D+ J
docker-compose version 1.22.0, build f46880fe
2克隆(Clone) slipo的 neo-scan-docker仓库代码,并使用 docker-compose来加载Docker镜像。 下载镜像可能需要点时间,请耐心等待done状态的出现。2 k* l8 x1 y2 n, | [+ v
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 h1 c! O4 \+ L
Unpacking objects: 100% (27/27), done. f- q1 l/ [/ z3 [0 n
richie@Redbuntu:~/Desktop$ cd neo-scan-docker/( O0 r5 O; w* v% Y, L
richie@Redbuntu:~/Desktop/neo-scan-docker$ sudo docker-compose up
Starting neo-scan-docker_postgresql_1 ... done# }8 Y0 e0 X6 V+ X# g
Starting neo-privnet ...7 C6 d1 O+ ~- y8 `
done' R" s& ?2 w ]! Y# q
Starting neo-scan ...4 [8 F% j9 s6 l% ~" A# E
done7 w+ d0 Q. Y7 H. O0 Q
Attaching to neo-scan-docker_postgresql_1, neo-privnet, neo-scan`/ J6 [% N* ?* Q0 i/ ? ^5 C
3在你的主机文件中,添加127.0.0.1 neo-privnet。注意:主机文件的位置可能因操作系统而异。# H. Y" O9 h1 C1 ]5 G( `9 [" o6 r
Unix/Linux/macOS - /etc/hosts2 F6 S0 u* d* U! O/ n# R" m$ R
Windows - C:\Windows\System32\Drivers\etc\hosts`
4在浏览器中输入http://127.0.0.1:4000/,可以看到City of Zion (CoZ)提供的neo-scan网页界面。: E1 c8 t. k; x u2 [" T
8 W# l+ E1 ?4 m' f; V
5点击钱包地址(Wallet Addresses),你可以看到预存有NEO和GAS的钱包地址。部署智能合约的时候我们需要使用到这些Token。更多信息,可以查看 neo-privatenet 。/ D) q, K; n Q0 L
导入WIF密钥可以获取预存有NEO和GAS的钱包的密钥。 私钥/WIF 密钥 KxDgvEKzgSBPPfuVfw67oPQBSjidEiqTHURKSDL1R7yGaGYAeYnr 地址: AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y 脚本哈希值 (用于检查): b'#\xba\'\x03\xc52c\xe8\xd6\xe5"\xdc2 39\xdc\xd8\xee\xe9'" W1 T- q9 f0 Z3 l# p
这样你的NEO私有域和neo-scan就已经配置好了。0 G; F7 I7 V) U2 E
下一步,配置neo-storm。( {& O2 T# P. ?! g, n: R. ~$ X! Y5 g
1在终端中输入下面这几条命令, go version、dep version以及echo $GOPATH,确认一下Go, Dep, GOPATH都已经准备好。
richie@Redbuntu:~$ go version
go version go1.10.1 linux/amd64
richie@Redbuntu:~$ dep version$ n. l! |+ e: v( k9 h: ~& B: V
dep:8 u* @( U& f$ V5 _5 @% C
version : devel
build date :
git hash : 6 H1 n& N7 z' ?- g) x/ e9 A" j
go version : go1.8.3
go compiler : gc6 F4 m6 s f% \. y# V6 N& r/ e
platform : linux/amd64$ w3 _$ ^- w/ k+ Q/ ~# Y7 X
richie@Redbuntu:~$ echo $GOPATH
/home/richie/go
2输入 go get命令获取neo-storm,输入dep命令检查依赖包,使用make install命令进行安装。 *忽略警告信息
richie@Redbuntu:~$ go get -u* j) _' A V a6 n
github.com/CityOfZion/neo-storm
package github.com/CityOfZion/neo-storm: no Go files in2 s) N1 u; J9 x/ z0 x
/home/richie/go/src/github.com/CityOfZion/neo-storm1 r; r/ Z3 j5 u/ ]9 k
richie@Redbuntu:~$ cd $GOPATH/src/github.com/CityOfZion/neo-storm1 d0 N: O3 `/ M
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$ sudo dep ensure
-update/ l" W8 o% J( I* A' f+ H& D
dep: WARNING: Unknown field in manifest: prune
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$ sudo make install& C( V1 q9 x- N+ S5 i9 Q# V
installing project dependencies. C1 r' V6 K2 \* s/ e
dep: WARNING: Unknown field in manifest: prune
installing neo-storm framework( }% @+ m( l5 f6 f& w w# s% L
done installing, happy coding!* \# H7 {- F6 m8 m( H. o- ]1 k
3现在neo-storm已经安装好了,你可以测试一下。& j3 s) r2 w! _% ]7 U' G; o
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$& G/ J/ b) l, e" I1 G" @2 ]
neo-storm
NAME:7 r% J; i- f/ l
neo-storm - Neo smart contract
framework for the Go programming language0 m2 ^# E- {* I+ V1 |$ c7 h' d) `6 m
USAGE:
neo-storm [global options] command[command options][arguments...] \3 @" B+ p% [8 l6 N
VERSION:( {/ T; @+ i( |; K2 ]
0.0.0
COMMANDS:, G; N1 ]: W" f w, I7 A0 a& \
compile compile a smart contract to an .avm file' \$ c# p( O7 C/ t a* p; R7 x
testinvoke testinvoke a smart contract against a remote NEO RPC node& j) T1 y( m3 b" v
init initialize a new smart-contract in a directory with boiler plate code
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS: f) Y& G4 g8 ?6 O# H c
--help, -h show help2 U" S4 e# R/ i+ A- ^
--version, -v print the version
4“安装完成,开心编码” ——接下来开始我们的第一个智能合约吧。
richie@Redbuntu:~/Desktop$ cd ~/Desktop
richie@Redbuntu:~/Desktop$ neo-storm init -n NeoStormTest
Successfully initialized smart contract [NeoStormTest]
richie@Redbuntu:~/Desktop$ cd NeoStormTest/" ~* V- L2 Z7 F1 Y* h$ I
richie@Redbuntu:~/Desktop/NeoStormTest$ ls
main.go
richie@Redbuntu:~/Desktop/NeoStormTest$ cat main.go4 `, z# P( d1 [% J4 D2 J
package NeoStormTest
import "github.com/CityOfZion/neo-storm/interop/runtime"& j5 X# I! C* E* r5 \
func Main(op string, args []interface{}) {) [* P# n T9 B, B6 Q
runtime.Notify("Hello world!")4 ]2 O1 a: _" D% @
发行NEP-5通证合约- @2 a' b! ^; q; G( p
1要在NEO上发行NEP-5通证,我们必须遵守它的通证标准。 *改进的NEP5可以在Github上查看,它允许Token上线NEX交易所。1 a" }9 r& D" {7 @
NEP-5 Token Standard
Methods
-totalSupply()
-name()
-symbol()$ `' N7 C5 A' B
-decimals()1 |& S9 l4 U q' q2 _
-balanceOf(account)
-transfer(from, to, amount)
Events
-transfer(from, to, amount)
NEP-5(.1) by NEX
Methods* |5 W$ k' h, |( Y/ v
-totalSupply()7 Y4 K/ @0 Y9 U% ^+ T; y6 P) k9 ^
-name()
-symbol()
-decimals()) |* b+ {1 {) _9 n
-balanceOf(ctx, account)
-transfer(ctx, from, to, amount, callingScriptHash)
-transferFrom(ctx, from, to, amount)2 f* \) X+ x, i2 p! n( M
-approve(ctx, owner, spender, amount, callingScriptHash)
-allowance(ctx, owner, spender)
2不用重新编写一个Token合约,你可以fork/clone我的github仓库。7 g: o# M, ]6 l/ [
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查看。2 c1 w; p1 |! a9 f& T
https://github.com/maplerichie/neo-go-nep5; d0 [+ w' m6 h8 b) S1 \7 G
4编辑package,修改NEP-5的属性值,例如decimals, multiplier, owner Address, Name, Symbol, TotalSupply。% L7 D$ L3 Q6 A! W$ Z
Package:应该将package修改为 package MyFirstNeoGoContract ,从而与文件夹名称保持一致。
Decimals:用来设置Token使用的小数位数或者Token可被分割的最小单位。
例如:NEO的小数点位数是0,意味着它是不可分的Token。因此不能转账或者接收小数个NEO,只能是整数个。小数只能在交易所使用,因为它们创建了自己的十进制系统来方便交易。! w7 U5 Y* d L5 x
Multiplier:这给出了Decimals和TotalSupply相乘时的值。 输入格式为10 ^ Decimals。
例如: decimals = 6时,multiplier的值应该是10^6,即multiplier = 1000000。
Owner: Token发行者的地址。这里我们使用neo-privetenet的地址AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y。
Name: 字符串格式的NEP-5Token的名称。 z+ J6 j- O# A5 k, H
Symbol: NEP-5Token符号,通常是3个字符的长度,但不是必须的。! T2 N; q( Q: v8 N0 z# w: `$ `
TotalSupply: 总发行量。设置一个总发行量可以防止通胀。) ?3 d& ?2 l' ?1 q
5修改参数同时确保符合NEP-5Token标准。然后使用neo-storm来编译GO智能合约。
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ neo-storm compile -i main.go -o main.avm% \9 ~8 h/ s1 d2 }3 o# }6 c
6当前目录下你可以看到 main.avm文件。现在neo-storm不会运行检查NEP-5Token标准。我的经验是缺少owner Address信息时,会显示错误信息。
7现在讲NEP-5合约部署到Privatenet Docker。这么做之前我们需要先获取Privatenet Docker ID值,然后在主机上复制main.avm文件并粘贴进Privatenet Docker镜像中,然后将它附加到运行的Docker中。* R/ d2 k) s7 K+ @& n$ c
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo
docker ps+ l6 X1 S! m& l- M- T
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES! F: r& I, [3 |0 x: N8 h
69c60667835b slipoh/neo-scan "/bin/sh -c 'sleep
3…" 6 hours ago Up About a minute 0.0.0.0:4000->4000/tcp 3 O. ^1 Y! X6 u6 O4 ]( \
neo-scan) N) ] l2 }* z q
88b358cdd8ff 2 G" ~9 N" X1 H1 X% B
cityofzion/neo-privatenet
"/bin/bash /opt/run.…"
6 hours ago Up About a
minute
0.0.0.0:20333-20336->20333-20336/tcp,3 `9 n; L# _$ ~& I
0.0.0.0:30333-30336->30333-30336/tcp 4 r* l: R# x( Z) i
neo-privnet- \5 Q0 M5 p" D) T! E; U* q& v
ab96dc398c62 postgres:10.1 $ n+ F* y9 l1 j4 c, k" B2 a
"docker-entrypoint.s…" ! A- t+ _6 H( @" a
6 hours ago Up About a
minute 0.0.0.0:5432->5432/tcp - [7 ?. w6 v, x9 C7 Z6 R
neo-scan-docker_postgresql_17 ? y. ^; S/ l: h, [
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo docker cp main.avm9 Q* |. @* ]! a, m1 \5 g. I
88b358cdd8ff:/neo-python
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo docker exec -it
88b358cdd8ff /bin/bash/ }8 ]3 v; H* O* t2 U% e
*共识节点运行在在screen sessions,使用’screen -ls’命令查看
*neo-python安装在/neo-python目录下,目录下带有a neo-privnet.wallet文件
*有问题可报告给:https://github.com/CityOfZion/neo-privatenet-docker
8在Docker上,打开neo-python-cli终端并使用密码coz解锁钱包。
root@88b358cdd8ff:/neo-python# neopy
Privatenet useragent '/NEO:2.7.6/', nonce: 513759764
[I 180914 10:34:09 LevelDBBlockchain:114] Created Blockchain DB at /root/.neopython/Chains/privnet
[I 180914 10:34:09 NotificationDB:73] Created Notification DB At
/root/.neopython/Chains/privnet_notif 0 {; _9 p- ~$ d5 `/ I
NEO cli. Type 'help' to get started
neo> open wallet neo-privnet.wallet
[password]> ***# n: b& S. h- }$ I& M2 }4 m5 q* l
Opened wallet at neo-privnet.wallet* ~5 R( }" x$ o0 z+ i" b; ?
9部署合约main.avm前,使用neo-scan看一看钱包余额。
neo> wallet
[I 180914 11:01:22 UserWallet:538] Script hash) v/ t5 D5 Q7 H/ r9 O' O
b'#\xba\'\x03\xc52c\xe8\xd6\xe5"\xdc2 39\xdc\xd8\xee\xe9' 9 s T9 ?9 ~$ t+ O4 `
Used 0.357 Gas ' x9 m8 Z: k5 o! t
Used 0.357 Gas 1 I% G- L: g6 K- t9 \+ L
Wallet {7 D1 E- I2 H/ r! a0 I% H/ I9 ~
"path":
"neo-privnet.wallet",$ y& H6 o0 C8 i) @- o7 u0 K4 H0 \; V
"addresses": [: h8 Z: X# Z7 a) Y/ Z8 m! P% j3 O
{
"version": 0,( S c. p" T: `+ i, x* ]0 Q
"script_hash":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",
"frozen": false,
"votes": [],
"balances": {
"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":
"100000000.0",/ a7 h! P# [0 D/ d! u5 M
, Q8 _3 J1 x: g) \
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":
"74589.9996"/ s: X$ N, H) Z& b& i8 w4 _; l
},% ]! Z5 D* x1 O! @
"is_watch_only":
false,. v. }9 Q) W' f: G7 F2 y8 F" y
"tokens": [
"[a3640dd3c560c75528e5f861da5da98958d0d713]" m2 R) R% l9 p. H
NXT2 : 2500000.00000000"
]' [8 O$ {; u `- Z2 S7 y9 B* E, P
}, ^/ R4 L2 w' E; w7 W1 n+ z% Z. g1 p
],
"height": 10294,/ `2 c9 m2 n, P
"percent_synced": 100,
"synced_balances": [2 C) W0 D$ @9 ]
"[NEO]: 100000000.0 ",3 |2 c9 n* C" W
"[NEOGas]: 74589.9996
",% {2 i; n; M; J
"[NXT2]: 2500000 "
],
"public_keys": [) j, y0 x3 d0 f9 d% a; c
{
"Address":7 |+ U- }' g. O
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",6 A+ z! J0 L9 h5 ]* e" B9 E
"Public Key":
"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a" o% H& v. D. F3 l7 F% g% O
}
],1 X7 q, F1 W9 b8 `
"tokens": [
{# W9 g% V+ Q$ g, ]0 u6 x
"name": "NEX
Template V2",6 \! B% k: a. t& A
"symbol":4 p( n0 o) |3 [5 K
"NXT2",
"decimals": 8,
"script_hash":
"0xa3640dd3c560c75528e5f861da5da98958d0d713",
"contract_address":
"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"; @) H1 p9 v; ^, S( I4 V8 Z
}( _5 T; f5 ?) Q( y9 N1 S, P' {. r
],$ R% q, i( p+ [* V# X- L+ v' \
"claims": {
"available":
"0.0",
"unavailable":' V$ H& i; q3 q9 D) g
"7730.0"
}
}
10看来可以开始部署了。再次提醒,钱包密码是coz。+ J) l3 v% X1 }* E# ^' F$ Z6 P/ i
neo> import contract main.avm 0710 05 True False ; c- f i8 C7 e! L. h
contract properties: 1
Please fill out the following contract details:4 r1 N1 o: o- b, P
[Contract Name] > MyFirstNEOToken- j- D1 K( y9 Y! k4 D* P
[Contract Version] > 1.0
[Contract Author] > Richie
[Contract Email] > babierichie@hotmail.com
[Contract Description] > First NEO Token
Creating smart contract....8 f8 {8 Q, i. \
Name: MyFirstNEOToken
Version: 1.0
Author: Richie B6 j1 c E/ j, r# F* r2 c& ?
Email: babierichie@hotmail.com
Description: First NEO Token
Needs Storage: True
Needs Dynamic Invoke: False
{
"hash":
"0x4e9b87c96158a8e2cc4b74794f727b38947e9862",
"script": "...",$ @2 x3 w/ H' V4 l
"parameters":
"0710",' Q- u0 ^/ J( Y' ?' `
"returntype":, i% i, q: X) C
"05"
}; c. _ G( q2 R. c: b/ P: w/ \
Used 500.0 Gas i) n2 d) R1 A& Q' X
-------------------------------------------------------------------------------------------------------------------------------------
Test deploy invoke successful# k" n* o# K: e
Total operations executed: 11 6 U/ c8 d4 A. o6 _" }# s7 G
Results:
[]9 |, b: {$ l4 h9 w
Deploy Invoke TX GAS cost: 490.0
Deploy Invoke TX Fee: 0.0
-------------------------------------------------------------------------------------------------------------------------------------9 k; C% P0 |0 V' T8 y
Enter your password to continue and deploy this contract9 j; T; l1 k7 G& n2 X7 V
[password]> ***( @/ l1 r, ?" i
[I 180914 11:03:33 Transaction:613] Verifying transaction: b'9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114'' @8 ]+ @1 U Y1 w. k
Relayed Tx: 9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114
11使用给定的哈希值验证交易。 注意:不同机器的哈希值是不一样的。2 E+ f5 l8 U, g( r! R' E
neo> tx
9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114
{4 ]( I V8 o/ N! Q" d3 G
"txid": "0x9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114",
"type":2 f' o+ s1 y# B4 _, ]* j
"InvocationTransaction",
"version": 1,
"attributes": [],
"vout": [: h; Y* M" X9 K5 r: Z% I
{3 c2 N; S$ c! l* W; G
"n": 0,! w" n' T* p$ D; ^
"asset":8 X: o& K0 n! A, Q! |
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",! x6 v2 z: N' m1 Y r
"value":
"25493.9997",* a, m* g8 Y2 o; r0 d+ n
"address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"9 S& T! u% T1 V6 k t0 r
}
],
"vin": [9 C5 L- Y9 S) J. r* N. I5 i
{( ?: l: Q& i# D, w: B# m
"txid":8 V7 `! x: K* Z
"475a091ccaa6330320a29884f5f8796a260bdba91352dd409d16787b37d8be26",
"vout": 0
}
],. ?9 [. k4 T) y) ~+ m
"sys_fee":
"4.9e-06",
"net_fee":9 ^/ c2 g4 g+ x, x
"489.9999951",
"scripts": [
{
"invocation":
"40510fa6630ef581108057ebe967cd306522466a32eaf068cf3717da1e640b866246c013033e3c878ebf9247a5a3500178b21b126b3af63ed07a86b0d2c4f34c89",* c8 T* F3 ]; K! b. K) Q
"verification": e6 x4 h- J I2 Z+ Y" ~3 e0 w
"21031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4aac"
}8 `1 M- F$ t% T' c
],5 {1 S. m' t* t b/ [2 F3 o. y% b- ^
"script": "...",9 A4 Z. B6 k7 K# Q* s" c
"gas": 49000000000,3 E& B/ G- [3 c, }( f n
"height": 10302,
"unspents": [- A* F# s1 N& A1 i
{
"n": 0,
"asset":$ C; p" r0 I* x0 l
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",
"value":
"25493.9997",4 \" L& _2 Y- b; ]! @
"address":, F( t L1 L" q
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y", J9 I d1 R4 k y" q
}7 [& _+ X8 |- E( v
]
}
12交易显示后,再次查看钱包余额。 在步骤9,我们的GAS余额为74589.9996,现在,GAS余额变为74099.9996。 因为这减少的490个 GAS已用于合约部署!# C" M& n: [$ @2 F' t: M
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 9 X/ T, O3 o: S7 o9 c
Used 0.357 Gas
Wallet {
"path":6 k2 h0 _) }! t5 |
"neo-privnet.wallet",
"addresses": [
{( p; g$ v! `8 S0 ?1 } v
"version": 0,4 T& o1 b! p9 [
"script_hash":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",$ n* |$ z) Q5 w& a3 }" z9 q
"frozen": false,
"votes": [],5 \# B! o m% D; A- a m2 H
"balances": {
- B: c7 z1 W+ Q, |/ V; X6 t
"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":
"100000000.0",' H$ f! p7 r9 y% \; \& L
$ o! D+ C6 `! M1 G* }8 c
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":
"74099.9995"
},
"is_watch_only":$ a* y3 Y w9 m g
false,
"tokens": [6 C! j) X( R, U3 O
"[a3640dd3c560c75528e5f861da5da98958d0d713] NXT2 :
2500000.00000000"8 ]$ P+ l6 ~" y: }3 U
]
}9 D2 J/ X. r, U5 h9 s; j5 `! T' V
],
"height": 10348,
"percent_synced": 100,
"synced_balances": [
"[NEO]: 100000000.0 ",
"[NEOGas]: 48605.9999
",) y! K, z4 o. `/ z1 a$ e9 X3 v
"[NXT2]: 2500000 "7 B* k) Z+ {$ ]1 N
],
"public_keys": [
{
"Address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",. R \' I# t/ G
"Public Key":0 x4 _( ~- R. W* F
"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"
}$ {4 ~& V" f9 p
],
"tokens": [/ L" R8 R' N) u5 b; H
{# c3 E5 y/ k! J9 ]
"name": "NEX& B! `2 V5 c- Q4 e1 B: D8 B
Template V2",
"symbol": "NXT2",
"decimals": 8,
"script_hash":+ O) U" ?, }9 e' b# D& F, d F
"0xa3640dd3c560c75528e5f861da5da98958d0d713",2 P; S7 P: X% a" d1 _1 m
"contract_address":; x, S M0 U; w+ b9 d7 P& e
"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"
}$ d z. m' l/ T( v2 a, [
],1 l3 |1 H0 C! ?- ?' i6 D3 l: C
"claims": {) I1 A" | `9 A2 `* T, E, c# H
"available":3 ]) }; ?5 V" b7 \4 }
"0.0",
"unavailable": "8652.0"! P8 A' V$ [1 J5 c" P0 N
}! Y2 M0 _6 U5 `$ l' i- r7 ?' {
}( C1 V2 _) n* r; g T. L d' X' n
我们也可以看一看部署好的合约。
neo> contract search My
Found 1 results for My$ A2 B- k4 ]' M
{8 H1 d; {) C: f6 A$ m# r4 M6 \
"version": 0,
"code": {# }6 r7 |' A6 `! L4 P
"hash": "0x4e9b87c96158a8e2cc4b74794f727b38947e9862",
"script": "...",# z: d, @+ p! a R6 Y1 d! N% `
"parameters": "0710",5 E9 e b$ {5 H+ ?* A, j$ z
"returntype": 5
},
"name": "MyFirstNEOToken",: d. c/ n0 L7 z
"code_version": "1.0",
"author": "Richie",
"email": "babierichie@hotmail.com",
"description": "First NEO Token",# k' D4 R: P2 R1 f& a! X5 z5 L
"properties": {
"storage": true,
"dynamic_invoke": false
}8 ~# T% d$ |& c* e
}! H. f. ]% }3 t' y3 Y
13最后,我们可以尝试使用钱包的密码coz,来调用这个带有合约哈希值的Token。
neo> testinvoke
0x4e9b87c96158a8e2cc4b74794f727b38947e9862 deploy []4 c! P+ A+ \7 o D3 Z
好了,现在你已经在NEO的私有域上成功的发行了NEP-5Token。
最后& ?& ]6 L0 Q" I
希望对于Gophers来说,能很轻松地照着本教程学习。也希望GO开发人员能加入 NEO’s Discord,一起开发学习。你一定要试一试!
如果您真的需要我的帮助,请在Discord上联系我(LikKee.Richie#5647)
成为第一个吐槽的人