使用GO语言在NEO私有链发行NEP-5 Token的开发指南
V刘晨曦
发表于 2022-12-2 15:25:23
135
0
0
开发语言
在NEO智能合约开发平台进行开发的优势之一是平台支持各种开发语言。8 R8 u7 d; `4 r5 M$ T$ v2 q3 `. q
NEO推荐使用C#语言,不过它也支持使用Python, Java, Go, Ruby,之后还会进一步支持Kotlin, C/C++, JavaScript等开发语言。.
尽管支持多种语言,但我们仍可以发现现有的很多项目使用的是C#、Python、Java,使用GO语言的并不多。因此,参考City of Zion (CoZ)上的资料,我想尝试写一篇关于使用GO语言开发的简单教程,希望能吸引更多使用GO语言的开发人员参与开发。
给GO开发人员的建议
无论你是编程新手还是经验丰富的开发人员,刚开始时都建议你在私有域或测试网上进行开发。
为什么?
因为在主网上部署NEP-5 Token需要消耗490个GAS。
写这篇文章的时候(2018年9月15日),GAS的市场价格是5.8美元,那么该笔费用就高达2842美元。对于任何创业公司而言,这都是一笔不小的费用。
按照GAS的历史最高价,每个Token的价格为95.87美元,那么仅仅部署一次智能合约,你的成本就要增加4,7000美元。
因此,刚开始开发的时候,建议你在私有域或者测试网上操作,当你准备好之后,再转到主网上部署合约。
要求
本教程中,开发环境的需求如下所示:
操作系统 – 桌面版Ubuntu Desktop 18.04.1 LTS
Git 命令行接口 –Git1 S1 D$ U8 m& B$ R! P( ^1 N; J
语言 – GO语言
Go语言依赖管理工具 – Dep2 u9 |( B& @8 }' \0 i
Docker –Docker CE 和 Docker Compose! }/ s9 J* b; K) ~8 n; \$ Y( t
编辑器 – Visual Studio Code, Extension: Go
使用到的NEO的资料
GO语言智能合约框架 – neo-storm
预建好的使用Python语言编写的neo-privnet-with-gas以及nep-scan镜像 – neo-scan-docker
重要提示:结果可能因NEO编译器和节点版本不同而有差异。. b# c3 g$ x3 k5 T/ b8 t
本质上来说,有几种方法可以运行私有域,例如使用 neo-go 或者 neo-privatenet-docker。 但是,在本教程中,我们会使用slipo编写的 neo-scan-docker。 neo-scan-docker是用neo-python构建的,所以它带有一些“Python”组件。 此外,它还带有neo-scan的UI,允许您分析智能合约的部署事务。
*安装方法可能因操作系统而异。 相关的详细信息,请点击上面的链接查看。* T5 `7 Q6 Z/ j
配置你的环境; o. W+ u6 L' L1 L7 R8 n3 h
首先,我们先用 neo-scan-docker来配置一下NEO私有域。. F& t( x: k4 u3 p; t" K
1 检查一下Git, Docker and Docker Compose这些工具是否已经准备好。+ f. C( j8 W! w% N) K
richie@Redbuntu:~/Desktop$ sudo git --version% ^3 {9 \! r" I+ E6 v- R
git version 2.17.1
richie@Redbuntu:~/Desktop$ sudo docker -v+ g; D& Y+ L' L2 O$ \
Docker version 18.06.1-ce, build e68fc7a% R6 C& ^/ L% y/ b
richie@Redbuntu:~/Desktop$ sudo docker-compose -v
docker-compose version 1.22.0, build f46880fe' I1 Z; Z" P t" {- |
2克隆(Clone) slipo的 neo-scan-docker仓库代码,并使用 docker-compose来加载Docker镜像。 下载镜像可能需要点时间,请耐心等待done状态的出现。6 L& f" X7 K* v) ^3 ]- Y3 I
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# Q3 V7 S: s6 ^2 M
Unpacking objects: 100% (27/27), done.8 `: q+ w0 a& ]$ b) S# B
richie@Redbuntu:~/Desktop$ cd neo-scan-docker/9 f5 S; z- i0 C
richie@Redbuntu:~/Desktop/neo-scan-docker$ sudo docker-compose up
Starting neo-scan-docker_postgresql_1 ... done
Starting neo-privnet ...
done8 [& K# m% L7 { q8 e& B
Starting neo-scan ...
done# e, j" i* s' x
Attaching to neo-scan-docker_postgresql_1, neo-privnet, neo-scan`, [7 m5 B% O$ ?, x0 k- ^# g+ T- j
3在你的主机文件中,添加127.0.0.1 neo-privnet。注意:主机文件的位置可能因操作系统而异。
Unix/Linux/macOS - /etc/hosts# I S, s5 O2 g+ m
Windows - C:\Windows\System32\Drivers\etc\hosts`
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'% n5 l, ~8 q- d# n: ^9 r1 S( {
这样你的NEO私有域和neo-scan就已经配置好了。
下一步,配置neo-storm。
1在终端中输入下面这几条命令, go version、dep version以及echo $GOPATH,确认一下Go, Dep, GOPATH都已经准备好。2 d# U& { S/ V$ x- `
richie@Redbuntu:~$ go version
go version go1.10.1 linux/amd64: m7 I5 [+ ?* d4 S
richie@Redbuntu:~$ dep version
dep:: w4 g8 P& `4 d- W1 t' X3 M
version : devel" V6 _7 f0 _# e* P! M- i
build date : " d/ Y: S. f8 V9 L( m# o
git hash : * {4 c1 F* b0 {" g
go version : go1.8.3( f1 o( A5 a4 E
go compiler : gc5 q3 y/ C$ \4 @6 n
platform : linux/amd647 a3 k: [( V' s! S* t; Q p9 i
richie@Redbuntu:~$ echo $GOPATH& C, l, X2 u. @3 D
/home/richie/go) O6 R. D& f. N6 c/ |4 J9 D8 b3 Z
2输入 go get命令获取neo-storm,输入dep命令检查依赖包,使用make install命令进行安装。 *忽略警告信息
richie@Redbuntu:~$ go get -u8 X, M( [8 l1 v& x8 [& |
github.com/CityOfZion/neo-storm
package github.com/CityOfZion/neo-storm: no Go files in' M& o" J: a8 U) Q
/home/richie/go/src/github.com/CityOfZion/neo-storm4 N& U! _$ D) f0 p( U: v1 z
richie@Redbuntu:~$ cd $GOPATH/src/github.com/CityOfZion/neo-storm
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$ sudo dep ensure
-update v) A( `1 g- L1 c6 X
dep: WARNING: Unknown field in manifest: prune& {& j [* y) l/ {
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$ sudo make install7 r0 _1 a' O3 a, y' F; n
installing project dependencies; ^5 Y+ _/ Q9 d6 d8 [, I
dep: WARNING: Unknown field in manifest: prune) o/ M; U3 z, m5 a- Y
installing neo-storm framework! Y6 I. Y6 `5 p& E
done installing, happy coding!
3现在neo-storm已经安装好了,你可以测试一下。
richie@Redbuntu:~/go/src/github.com/CityOfZion/neo-storm$- ^* v: h- h, U# | o" J
neo-storm+ h7 y8 H7 k! |# U1 p R8 M
NAME:0 o- V6 m& p/ `8 ?( \% ^, o5 ~
neo-storm - Neo smart contract
framework for the Go programming language: E/ a4 g' k# O0 _& ^
USAGE:
neo-storm [global options] command[command options][arguments...]
VERSION:
0.0.06 J' }, A) t6 n( r! w4 b
COMMANDS:4 ^3 p+ ?" w' s% G
compile compile a smart contract to an .avm file
testinvoke testinvoke a smart contract against a remote NEO RPC node& x$ Q. L" D/ e- h5 A
init initialize a new smart-contract in a directory with boiler plate code+ F K4 e/ G$ [* K1 J% m
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--help, -h show help" v# ]) ]2 k. q- u2 d0 i! W# e# v& h
--version, -v print the version
4“安装完成,开心编码” ——接下来开始我们的第一个智能合约吧。, P/ ` ^1 d9 s9 X; p/ s
richie@Redbuntu:~/Desktop$ cd ~/Desktop
richie@Redbuntu:~/Desktop$ neo-storm init -n NeoStormTest
Successfully initialized smart contract [NeoStormTest]
richie@Redbuntu:~/Desktop$ cd NeoStormTest/6 p& Y( X ] H/ F: X
richie@Redbuntu:~/Desktop/NeoStormTest$ ls
main.go6 \, o [% ~+ u
richie@Redbuntu:~/Desktop/NeoStormTest$ cat main.go
package NeoStormTest: u' {' b9 X' _# H' N
import "github.com/CityOfZion/neo-storm/interop/runtime"5 o' N* Z2 `6 H D
func Main(op string, args []interface{}) { X; {& ^% j0 r' ?6 U$ i' P
runtime.Notify("Hello world!")& ?4 \# ^5 A ~, E2 }
发行NEP-5通证合约
1要在NEO上发行NEP-5通证,我们必须遵守它的通证标准。 *改进的NEP5可以在Github上查看,它允许Token上线NEX交易所。
NEP-5 Token Standard
Methods8 e' g% ~9 G, s3 ?6 _
-totalSupply(). `" [" j' \) P8 _6 E' {# M
-name()' v- G! T7 S5 ~* z0 [1 P( ^' T* A
-symbol()- [) l3 `* h5 Q( Z# j
-decimals()
-balanceOf(account)
-transfer(from, to, amount)
Events
-transfer(from, to, amount)
NEP-5(.1) by NEX
Methods
-totalSupply()
-name()" A/ l8 L! t0 g/ y" ?" t+ ]9 h
-symbol()# C' d' e/ v+ {0 G
-decimals()
-balanceOf(ctx, account)& v2 ?8 E8 r1 T5 j
-transfer(ctx, from, to, amount, callingScriptHash)
-transferFrom(ctx, from, to, amount)
-approve(ctx, owner, spender, amount, callingScriptHash), n% ^6 B9 f; _/ K% t4 f
-allowance(ctx, owner, spender)
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查看。, O/ j( Y/ a% j C
; @0 d! a* w3 b* D- H1 M
https://github.com/maplerichie/neo-go-nep5( V! y/ F7 }% F, q
4编辑package,修改NEP-5的属性值,例如decimals, multiplier, owner Address, Name, Symbol, TotalSupply。
Package:应该将package修改为 package MyFirstNeoGoContract ,从而与文件夹名称保持一致。2 A+ E9 g' l' H+ x2 L% y5 M7 X E/ ~
Decimals:用来设置Token使用的小数位数或者Token可被分割的最小单位。
例如:NEO的小数点位数是0,意味着它是不可分的Token。因此不能转账或者接收小数个NEO,只能是整数个。小数只能在交易所使用,因为它们创建了自己的十进制系统来方便交易。2 | `. ]" w& G
Multiplier:这给出了Decimals和TotalSupply相乘时的值。 输入格式为10 ^ Decimals。% ?2 ]( X/ o+ P
例如: decimals = 6时,multiplier的值应该是10^6,即multiplier = 1000000。
Owner: Token发行者的地址。这里我们使用neo-privetenet的地址AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y。/ Q. s5 s7 m- A- C* D& b! l
Name: 字符串格式的NEP-5Token的名称。
Symbol: NEP-5Token符号,通常是3个字符的长度,但不是必须的。
TotalSupply: 总发行量。设置一个总发行量可以防止通胀。
. s+ V7 w, v8 {* O) ?
5修改参数同时确保符合NEP-5Token标准。然后使用neo-storm来编译GO智能合约。/ H0 q- s) l/ D; j% y: h8 G, F8 w: r0 e
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中。/ U" ^1 E" m6 L, z3 ~; p
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES) v% t( P+ N, y: T1 Q) \
69c60667835b slipoh/neo-scan "/bin/sh -c 'sleep
3…" 6 hours ago Up About a minute 0.0.0.0:4000->4000/tcp 5 _ z' s0 u7 \. S# v) R
neo-scan1 j3 q/ ?( \2 j) G
88b358cdd8ff & |/ T0 w ~. A- j1 Z* K: U( W& y
cityofzion/neo-privatenet
"/bin/bash /opt/run.…" 4 k$ G0 f+ f$ @4 O! h
6 hours ago Up About a
minute
0.0.0.0:20333-20336->20333-20336/tcp,) _9 }# }1 m8 ?
0.0.0.0:30333-30336->30333-30336/tcp
neo-privnet: F1 W ]/ e& O/ M. t2 N
ab96dc398c62 postgres:10.1 ) M: P; h! V4 {4 d: g, h$ s
"docker-entrypoint.s…" 9 S$ g; W& h% l0 A- r$ k) f0 m) b4 z
6 hours ago Up About a
minute 0.0.0.0:5432->5432/tcp
neo-scan-docker_postgresql_1
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo docker cp main.avm- J1 Q6 M: l* Y, ?
88b358cdd8ff:/neo-python3 U! P& m6 \- [% S8 p6 D5 F5 t, C0 {( {
richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$ sudo docker exec -it" |% B1 _2 G6 p9 n$ w( W) g
88b358cdd8ff /bin/bash
*共识节点运行在在screen sessions,使用’screen -ls’命令查看
*neo-python安装在/neo-python目录下,目录下带有a neo-privnet.wallet文件: {2 l2 B4 N6 k
*有问题可报告给:https://github.com/CityOfZion/neo-privatenet-docker
8在Docker上,打开neo-python-cli终端并使用密码coz解锁钱包。
root@88b358cdd8ff:/neo-python# neopy8 A! i: {& m0 M# l% {( R" G; z
Privatenet useragent '/NEO:2.7.6/', nonce: 5137597642 v+ x/ i. b$ {7 @. m6 Y
[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 + k9 [, C- o# F; P8 }8 U
NEO cli. Type 'help' to get started
neo> open wallet neo-privnet.wallet
[password]> ***+ L. y, ?4 E8 |# E4 A6 ~5 r
Opened wallet at neo-privnet.wallet& D! m4 s5 `8 a6 z3 u( Z
9部署合约main.avm前,使用neo-scan看一看钱包余额。! B% }! Z# G5 {! W! p
neo> wallet
[I 180914 11:01:22 UserWallet:538] Script hash! b" Z5 O, K; P
b'#\xba\'\x03\xc52c\xe8\xd6\xe5"\xdc2 39\xdc\xd8\xee\xe9'
Used 0.357 Gas 1 S$ i& @" x( U/ A, z) V, Z
Used 0.357 Gas 9 N+ b8 }: y# g2 x9 w3 s
Wallet {( V# `% {3 h7 l- O3 d p9 k
"path":. k5 Y, ^: X4 i
"neo-privnet.wallet",$ G- n$ y6 ^, a' w) w
"addresses": [/ T- h9 t* N& P# r b# g
{+ ^9 W$ A* o. d' e8 I
"version": 0,4 m# j( e$ V2 y
"script_hash":3 e( ?: H; G+ t
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",
"frozen": false,3 W5 W3 J$ f2 Z0 a' ~: C( m* W$ P) |
"votes": [],8 P/ ]* g4 k+ G( B2 n1 `4 G
"balances": {
"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":
"100000000.0",
0 R8 s' Y8 z- ]/ m9 M. u
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":
"74589.9996"- P7 a3 \% A" H5 r
},7 B# d* L' _0 u) S/ |3 m, r
"is_watch_only":. I# S$ }8 Z- o
false,/ M* o( s6 k7 g7 [
"tokens": [( S0 A8 H# b6 m; ^0 s) O
"[a3640dd3c560c75528e5f861da5da98958d0d713]
NXT2 : 2500000.00000000"' C. \1 U3 }5 j0 _6 R
]
}4 a: V$ y3 o' ]
],
"height": 10294,! z3 G+ u! n: c/ D2 T" C* t6 }5 [
"percent_synced": 100,9 C, s0 X6 {4 j5 r
"synced_balances": [& H9 I; u! R( F' d/ L+ Y
"[NEO]: 100000000.0 ",+ I& G' Y# {, U8 r7 Q7 F8 ?
"[NEOGas]: 74589.9996
",
"[NXT2]: 2500000 "9 T5 w( ]0 E" l2 R
],8 V: f$ x% Y2 x
"public_keys": [
{% F5 z- L% R2 }& j; e' w7 y6 W5 r* j
"Address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",! D: Y# Q, s& W
"Public Key":
"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"
}% D) k) p1 l# b4 J. d
],
"tokens": [
{; |- l) a6 b, V8 W/ z/ |
"name": "NEX0 o- ~0 t, Q$ E$ N
Template V2",
"symbol":
"NXT2",
"decimals": 8,
"script_hash":
"0xa3640dd3c560c75528e5f861da5da98958d0d713",* I, W( H1 e3 [% N! B
"contract_address":
"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"
}! i, q8 ?, O5 P, l. ]
],9 ]& s: y# A+ S$ {& O$ ~7 F
"claims": {
"available":
"0.0",8 y5 X& F+ o# ~& t
"unavailable":
"7730.0"4 \; t1 p: H; Q |$ x) u% e
}
}
10看来可以开始部署了。再次提醒,钱包密码是coz。
neo> import contract main.avm 0710 05 True False / j g7 ~9 j9 b3 Y
contract properties: 1
Please fill out the following contract details:
[Contract Name] > MyFirstNEOToken/ L' {& o5 U% x
[Contract Version] > 1.0
[Contract Author] > Richie
[Contract Email] > babierichie@hotmail.com. D' \. x! z7 a7 \5 i" w
[Contract Description] > First NEO Token% z; i% E6 C! [* g" ?. ]
Creating smart contract....( w/ v0 T6 x' n+ K& |+ o6 r K
Name: MyFirstNEOToken * {% Y. W E/ x1 {( f6 L- h) G
Version: 1.0* M; M" B& ^, ?2 ]; H, b( f/ s
Author: Richie 8 [) V$ Q( F) H- l: b8 |, Z7 S: ~
Email: babierichie@hotmail.com + @4 U* h2 G2 L
Description: First NEO Token ) v$ |2 `0 v S- @. p. ]% P# x
Needs Storage: True 5 p2 ?& D4 k) ~% W0 J6 {/ y8 V
Needs Dynamic Invoke: False 3 W9 x# k8 l2 @$ T# L
{
"hash":
"0x4e9b87c96158a8e2cc4b74794f727b38947e9862",6 Y" Q( S" u9 e( q4 r( D
"script": "...",
"parameters":
"0710",
"returntype":
"05"
}7 ^. a& ~6 M% ?1 o3 O7 N* @
Used 500.0 Gas2 \* _. W6 Q% D8 Q
-------------------------------------------------------------------------------------------------------------------------------------
Test deploy invoke successful
Total operations executed: 11
Results:
[]! U* r% A) R5 V# x% [, c3 ^
Deploy Invoke TX GAS cost: 490.0
Deploy Invoke TX Fee: 0.0 2 ~! c2 f, T/ J9 c/ }* L& Y, q
-------------------------------------------------------------------------------------------------------------------------------------# Q: B2 S, D$ Z8 O6 E
Enter your password to continue and deploy this contract) b* @$ ?- ^; Z- G- Z
[password]> ***
[I 180914 11:03:33 Transaction:613] Verifying transaction: b'9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114'- Z+ J: H# Z3 t8 Z
Relayed Tx: 9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114
11使用给定的哈希值验证交易。 注意:不同机器的哈希值是不一样的。
neo> tx7 Z/ {) J. b, }/ _) Z+ F0 S0 G
9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114
{3 l5 c% u% `) j- i3 L* D
"txid": "0x9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114",5 a, o! u- D8 u5 @! H. x% G
"type":. \: o& r% f- P* c; l3 V5 g
"InvocationTransaction",& f7 _8 `1 T' D* Z* Y3 w! q
"version": 1,
"attributes": [],, X$ D' B. g: F- i. o8 |8 f
"vout": [8 b* J4 c; Q" s' _
{
"n": 0,- p/ W6 H. \9 ~- u
"asset":" M" r4 O0 o# L" ^! y* P$ P( T8 j0 r
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",, d- Q7 L% V% \4 `' w
"value":* ~* j* w& Y4 C% S2 v- ~
"25493.9997",) n* C- g% }9 p: F( F) j
"address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"/ G2 T+ H" D8 \* R# _2 S0 A! U1 o
}3 v4 O3 \# _6 p+ m
],
"vin": [' {9 C' I( |" e* F3 s2 @0 N4 \
{. E+ M6 X( d6 j4 V! M9 m
"txid":2 J: R* r& i8 F! [9 o' j9 E
"475a091ccaa6330320a29884f5f8796a260bdba91352dd409d16787b37d8be26",5 N B8 N" W( d7 D$ Z
"vout": 0
}9 O; F# F" {! F( K' n. x8 ?, V; a
],
"sys_fee":
"4.9e-06",9 R+ c0 g% t1 q4 S: J
"net_fee":
"489.9999951",
"scripts": [) c: o- F- s* C/ V4 B
{
"invocation":& N/ k7 g3 w0 j- m$ ?$ d( H: b
"40510fa6630ef581108057ebe967cd306522466a32eaf068cf3717da1e640b866246c013033e3c878ebf9247a5a3500178b21b126b3af63ed07a86b0d2c4f34c89",
"verification":) j3 [* }2 r u: B" x
"21031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4aac"6 k; Q( }% F2 a' j
}" d! |7 M# p4 i9 E. T8 ]) b; m
],0 P/ x7 ]5 K9 w J" Y+ D
"script": "...",
"gas": 49000000000,
"height": 10302,7 i1 l0 K3 F# ]/ F) C
"unspents": [
{
"n": 0,
"asset":
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",7 r3 g3 O, R4 ^5 I# {
"value":( G4 j1 I6 c7 ^
"25493.9997",
"address":0 ?1 y9 ` T" Y: j, a! X( w8 @
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"9 Q4 j& }0 R) i! l
}
]
}7 R' u& t( e6 P) F% j) ^
12交易显示后,再次查看钱包余额。 在步骤9,我们的GAS余额为74589.9996,现在,GAS余额变为74099.9996。 因为这减少的490个 GAS已用于合约部署!3 J* C5 J- Y7 e9 T h
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 {8 ?3 _5 @2 j% |2 D
"path":4 ]/ ?* Q6 S& k- I) S
"neo-privnet.wallet",
"addresses": [3 Q$ `7 r% h$ E$ r! F+ t
{
"version": 0,# L I( R$ q6 ~& `
"script_hash":* U0 r9 }! h7 w! s5 _( e1 z5 p
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",. m1 \8 x$ u0 h9 \5 @7 e
"frozen": false,
"votes": [],6 k7 o$ k6 d6 l' {; E. L1 O) u
"balances": {
"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":5 m X8 r1 R* h& R5 V; d2 T
"100000000.0",
/ t, m1 i4 z/ ^% R6 v
"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":
"74099.9995"( ^% D( D- b9 O( o% ~0 [1 ~
},
"is_watch_only":
false,5 V& K" e4 [$ M4 z9 q& A; I
"tokens": [
* U2 {4 N8 {4 L d1 ]
"[a3640dd3c560c75528e5f861da5da98958d0d713] NXT2 :1 N2 k5 E8 B5 ~) ^- B
2500000.00000000"
]
}
],1 d! f# m% o0 f
"height": 10348,
"percent_synced": 100,
"synced_balances": [
"[NEO]: 100000000.0 ",- O N( E/ K2 M; \. j! [0 g% ~
"[NEOGas]: 48605.9999- y3 \8 Y/ a5 t' h; I
",# f2 n4 ?( }1 i6 B' c
"[NXT2]: 2500000 "4 v$ s3 {: r' s: }
]," f' K: P# _! C3 W/ y# S6 g
"public_keys": [
{1 D; a3 J; M! x- j4 V1 }
"Address":
"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",, j. l6 C, U& K" f- H& J
"Public Key":3 o8 f7 { g' H/ Y
"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"6 c, Z5 ]! k/ Z0 B$ j/ d* C
}
],+ }# H) \$ q4 c% y+ Z5 A
"tokens": [
{
"name": "NEX
Template V2",
"symbol": "NXT2",1 O, c+ d( o* M
"decimals": 8,
"script_hash":) h6 E/ g9 A+ g. ^$ S/ t
"0xa3640dd3c560c75528e5f861da5da98958d0d713"," ]* {3 [) F4 F; ?3 ~$ s" n# B
"contract_address":
"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"
}: A8 l1 e# c+ A9 k$ w& {' m' P
],3 d; o J. Y! @* L8 I
"claims": {
"available":
"0.0",
"unavailable": "8652.0"
}
}3 v: S+ T0 ^' k4 R+ n
我们也可以看一看部署好的合约。
neo> contract search My
Found 1 results for My
{7 ]9 i& G7 _0 b+ [& N: I3 u
"version": 0,
"code": {9 D, b3 O$ M) R. y
"hash": "0x4e9b87c96158a8e2cc4b74794f727b38947e9862",
"script": "...",
"parameters": "0710",8 r0 @8 ]4 r" J& A/ m4 F7 W
"returntype": 5
},; g+ X, i# a* l: V+ h1 @* D3 {' \# u) T
"name": "MyFirstNEOToken",
"code_version": "1.0",
"author": "Richie",: L3 V4 G5 L& y! C# U
"email": "babierichie@hotmail.com",+ |: e2 n. q& @& G0 `+ ]
"description": "First NEO Token",: R; j) w. I. B5 C# x* a
"properties": {4 V/ H* F! S0 ~& G R7 Q
"storage": true,. j: r" R; N. m) N
"dynamic_invoke": false
}* [* S4 Z) _' Q2 O: ?! H% D
}, ]1 C6 {# l: Z, Y x$ o, @1 \. ]
13最后,我们可以尝试使用钱包的密码coz,来调用这个带有合约哈希值的Token。
neo> testinvoke U6 D7 l! q3 l2 ]% i7 |; }
0x4e9b87c96158a8e2cc4b74794f727b38947e9862 deploy []
好了,现在你已经在NEO的私有域上成功的发行了NEP-5Token。; p! D# T# @0 y- S
最后2 P, s5 {( V& M9 ]' K7 R
希望对于Gophers来说,能很轻松地照着本教程学习。也希望GO开发人员能加入 NEO’s Discord,一起开发学习。你一定要试一试!: J7 u8 C& \2 b1 d5 J- N
如果您真的需要我的帮助,请在Discord上联系我(LikKee.Richie#5647)
成为第一个吐槽的人