使用Go语言进行NEO智能合约及DApps开发教程

当前位置:首页 > 币圈百科 > 使用Go语言进行NEO智能合约及DApps开发教程

使用Go语言进行NEO智能合约及DApps开发教程

2022-11-29币圈百科215

蓑衣网小编2022

本文是使用Go语言设置NEO智能合约和NEODApps开发环境的教程。如果你还不知道NEO,smart contract,DApps是什么,可以参考以下资料:

什么是NEO,什么是GAS?—?blockknightNEO智能合约简介什么是NEO DApps?

补充材料:

NEO智能经济?—?NEO DAppsNEO适合初学者?—?今天的新新闻?—?neofan awesome NEO

NEO

开发语言介绍

NEO智能合约开发平台的一个优点就是平台支持多种开发语言。

蓑衣网小编2022NEO推荐使用C#语言,但也支持Python、Java、Go、Ruby,并将进一步支持Kotlin、C/C、JavaScript等开发语言。

尽管支持多种语言,但我们仍然可以发现,现有的很多项目使用C#、Python、Java,使用GO语言的并不多。所以参考锡安城(CoZ)上的资料,我想尝试写一个简单的GO语言开发教程,希望能吸引更多使用GO语言的开发者参与开发。

对GO开发者的建议

无论你是程序员新手还是有经验的开发者,建议你一开始就在私有域或者测试网上开发。

为什么?

因为在主网部署NEP-5令牌需要490气。

撰写本文时(2018年9月15日),天然气的市场价格为5.8美元,因此费用高达2842美元。对于任何创业公司来说,这都是一笔不小的开支。

根据燃气历史上的最高价格,每个令牌的价格为95.87美元,因此,仅部署一次智能合约,您的成本就会增加47,000美元。

所以在开发之初,建议你在私有域或者测试网络中操作。准备好了就可以去主网部署合约了。

要求

在本教程中,对开发环境的要求如下:

操作系统——桌面版Ubuntu桌面?18.04.1 LTS

Git命令行界面Git

语言Go语言

Go语言依赖管理工具dep

dockerdockerce?然后呢。docker Compose

EditorVisual Studio代码,扩展:Go

NEO使用的信息

GO语言智能合约框架-NEO-Storm

预先构建的用Python语言编写的neo-privnet-with-gas和nep-scan图像-?NEO-scan-docker

重要提示:结果可能因NEO编译器和节点版本而异。

本质上,有几种方法可以运行私有域,比如使用?尼奥戈?还是?新私人码头公司.但是,在本教程中,我们将使用slipo来编写它?新扫描对接器.Neo-scan-docker是用neo-python构建的,所以附带了一些“python”组件。此外,它还附带了neo-scan的UI,允许您分析智能合约的部署事务。

*安装方法可能因操作系统而异。有关更多信息,请单击上面的链接。

配置你的环境

首先我们来用?NEO-scan-docker用于配置NEO私有域。

1。检查工具Git、Docker和Docker Compose是否准备好。

richie@Redbuntu:~/Desktop$?须藤?饭桶?版本信息?版本?2 . 17 . 1 Richie @ red buntu:~/Desktop $?须藤?码头工人?-vDocker?版本?18.06.1-ce,建造?e 68 fc 7 arichie @ red buntu:~/Desktop $?须藤?docker-compose?-vdocker-compose?版本?1.22.0,建造?F46880fe

2。克隆)斯利波的?Neo-scan-docker仓库代码,并使用?Docker-compose加载Docker图像。下载镜像可能需要一些时间。请耐心等待完成状态。

richie@Redbuntu:~/Desktop$?饭桶?克隆?https://github.com/slipo/neo-scan-docker.gitCloning?变成?"新扫描对接器".遥控器:数数?对象:27,done.remote:总计?27?(delta?0),重用?0?(delta?0),包装-重复使用?27拆包?对象:100%?(27/27),完成了。Richie @ red buntu:~/Desktop $?cd?neo-scan-docker/Richie @ red buntu:~/Desktop/neo-scan-docker $?须藤?docker-compose?创业?neo-scan-docker_postgresql_1?doneStarting?neo-privnet???doneStarting?新扫描???完成连接?去哪?neo-scan-docker_postgresql_1,neo-privnet?新扫描3。在你的主机文件中,添加新私人网络。注意:主机文件的位置可能因操作系统而异。Unix/Linux/macOS?-?/etc/hostsWindows??-?c:\ Windows \ System32 \ Drivers \ etc \ hosts

4 .在浏览器中输入http://127.0.0.1:4000/,可以看到锡安城(兄弟)提供的新扫描网页界面十,十,五.点击钱包地址(钱包地址),你可以看到预存有新的和气体的钱包地址。部署智能合约的时候我们需要使用到这些令牌。更多信息,可以查看?新私人网络?

导入水不溶部分密钥可以获取预存有新的和气体的钱包的密钥。私钥/WIF?密钥kxdgvekzgsbppfuvfw 67 opqbsjideiqthurksdl 1 r 7 ygagyaeynr地址:AK 2 njjpjr 6 o 664 cwjki 1 qrxjqeic 2 zrp 8y脚本哈希值?(用于检查):b ' # \ xba \ ' \ x03 \ xc52c \ xe8 \ xd6 \ xe5 ' \ xdc 239 \ xdc \ xd8 \ xee \ xe9 '

这样你的新的私有域和新扫描就已经配置好了

下一步,配置新风暴。

1 .在终端中输入下面这几条命令,去吧版本、dep版本以及echo $GOPATH,确认一下Go,Dep,GOPATH都已经准备好。richie@Redbuntu:~$?去吗?versiongo?版本?go1.10.1?linux/amd64richie@Redbuntu:~$?dep?versiondep:版本?devel?建造?约会?饭桶?哈希?去吗?版本?go1.8.3?去吗?编译器?gc?站台?linux/amd64richie@Redbuntu:~$?回声?$GOPATH/home/richie/go

2 .输入去拿命令获取新风暴,输入dep命令检查依赖包,使用进行安装命令进行安装。 *忽略警告信息

richie@Redbuntu:~$?去吗?得到?-ugithub.com/CityOfZion/neo-stormpackage?github.com/CityOfZion/neo-storm:没有吗?去吗?文件?in/home/Richie/go/src/github。com/city of Zion/新风暴Richie @ red buntu:~ $?cd?$ GOPATH/src/github。com/city of Zion/新风暴Richie @ red buntu:~/go/src/github。com/锡安之城/新风暴$?须藤?dep?确保-updatedep:警告:未知?场?在?清单:prune Richie @ red buntu:~/go/src/github。com/锡安之城/新风暴$?须藤?制造?安装安装?项目?dependenciesdep:警告:未知?场?在?清单:修剪安装?新风暴?框架完成了吗?正在安装,开心吗?编码!

3 .现在新风暴已经安装好了,你可以测试一下。Richie @ red buntu:~/go/src/github。com/city of Zion/neo-storm $ neo-storm名称:新风暴?-?尼奥?聪明?合同框架?为了什么?那个?去吗?编程?语言用法:新风暴?【全球?选项]?命令【命令?选项][参数.]版本:0 .0 .0命令:编译?编译?答?聪明?合同?去哪?安?avm?文件?testinvoke?testinvoke?答?聪明?合同?反对?答?远程?尼奥?RPC?节点?初始化?初始化?答?新的?智能合同?在?答?目录?用什么?锅炉?盘子?代码?救命啊,h?表演?答?列表?的?命令?还是?救命?为了什么?一个?commandGLOBAL?选项:-救命啊?-h?秀?救命?-版本?-v?打印?那个?版本

4 ."安装完成,开心编码" ——接下来开始我们的第一个智能合约吧。richie@Redbuntu:~/Desktop$?cd?~/Desktop Richie @ red buntu:~/Desktop $?新风暴?初始化?-n?NeoStormTestSuccessfully?初始化?聪明?合同?【近地天体风暴测试】里奇@红buntu:~/Desktop $?cd?neo storm test/Richie @ red buntu:~/Desktop/neo storm test $?ls main。go Richie @ red buntu:~/Desktop/NeoStormTest $?猫?main.gopackage?NeoStormTestimport?'github.com/CityOfZion/neo-storm/interop/runtime'func?Main(op?字符串,args?[]界面{})?{?运行时。通知('喂?世界!)

发行NEP-5通证合约

要在新的上发行NEP-5通证,我们必须遵守它的通证标准。 *改进的NEP5可以在开源代码库上查看,它允许代币上线自鼻到耳到剑突交易所。

NEP-5?Token?标准方法-总供给()-名称()-符号()-小数()-余额(帐户)-转账(从,到,金额)事件-转移(从,到,额)NEP-5(.1)?被谁?NEX方法-总供给()-名称()-符号()-小数()-余额(CTX,账户)-转账(ctx,从,到,金额,callingScriptHash)-转自(CTX,从,到,金额)-批准(ctx,业主,斯彭德?金额,callingScriptHash)-津贴(ctx,业主,

2 .不用重新编写一个代币合约,你可以分叉/克隆我的开源代码库仓库。richie@Redbuntu:~/Desktop$?饭桶?克隆?https://github.com/maplerichie/neo-go-nep5?MyFirstNeoGoContract

3 .启动代码编辑器(我用的是可视化工作室代码),将~/Desktop/MyFirstNeoGoContract?添加到你的工作区(工作区).新风暴的例子文件夹里也有例子,可以点击https://github.com/CityOfZion/neo-storm/tree/master/examples/token查看。

https://github.com/maplerichie/neo-go-nep5

4. 编辑package,修改NEP-5的属性值,例如decimals, multiplier, owner Address, Name, Symbol,TotalSupply。

Package:应该将package修改为?packageMyFirstNeoGoContract?,从而与文件夹名称保持一致。

Decimals:用来设置Token使用的小数位数或者Token可被分割的最小单位。

例如:NEO的小数点位数是0,意味着它是不可分的Token。因此不能转账或者接收小数个NEO,只能是整数个。小数只能在交易所使用,因为它们创建了自己的十进制系统来方便交易。

Multiplier:这给出了Decimals和TotalSupply相乘时的值。输入格式为10 ^ Decimals。

例如: decimals = 6时,multiplier的值应该是10^6,即multiplier = 1000000。

Owner: Token发行者的地址。这里我们使用neo-privetenet的地址AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y。

Name: 字符串格式的NEP-5Token的名称。

Symbol:NEP-5Token符号,通常是3个字符的长度,但不是必须的。

TotalSupply: 总发行量。设置一个总发行量可以防止通胀。

5. 修改参数同时确保符合NEP-5Token标准。然后使用neo-storm来编译GO智能合约。

richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$?neo-stormcompile?-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$?sudodocker?psCONTAINER?ID????????IMAGE???????????????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS???????????????????????????????????????????????????????????????????????NAMES69c60667835b????????slipoh/neo-scan?????????????"/bin/sh?-c?'sleep3…"???6?hours?ago?????????Up?About?a?minute???0.0.0.0:4000->4000/tcp??????????????????????????????????????????????????????neo-scan88b358cdd8ff???????cityofzion/neo-privatenet??"/bin/bash?/opt/run.…"??6?hours?ago?????????Up?About?aminute??0.0.0.0:20333-20336->20333-20336/tcp,0.0.0.0:30333-30336->30333-30336/tcp??neo-privnetab96dc398c62????????postgres:10.1??????????????"docker-entrypoint.s…"??6?hours?ago?????????Up?About?aminute???0.0.0.0:5432->5432/tcp??????????????????????????????????????????????????????neo-scan-docker_postgresql_1richie@Redbuntu:~/Desktop/MyFirstNeoGoContract$?sudo?docker?cp?main.avm88b358cdd8ff:/neo-pythonrichie@Redbuntu:~/Desktop/MyFirstNeoGoContract$?sudo?docker?exec?-it88b358cdd8ff?/bin/bash

*共识节点运行在在screen sessions,使用’screen -ls’命令查看

*neo-python安装在/neo-python目录下,目录下带有aneo-privnet.wallet文件

*有问题可报告给:https://github.com/CityOfZion/neo-privatenet-docker

8在Docker上,打开neo-python-cli终端并使用密码coz解锁钱包。

root@88b358cdd8ff:/neo-python#?neopyPrivatenet?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?NEO?cli.?Type?'help'?to?get?startedneo>?open?wallet?neo-privnet.wallet[password]>?***Opened?wallet?at?neo-privnet.wallet

9 部署合约main.avm前,使用neo-scan看一看钱包余额。

neo>?wallet[I?180914?11:01:22?UserWallet:538]?Script?hashb'#\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":?[????????{????????????"version":?0,????????????"script_hash":"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",????????????"frozen":?false,????????????"votes":?[],????????????"balances":?{?????????"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":"100000000.0",??????????????"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":"74589.9996"????????????},????????????"is_watch_only":false,????????????"tokens":?[????????????????"[a3640dd3c560c75528e5f861da5da98958d0d713]NXT2?:?2500000.00000000"????????????]????????}????],????"height":?10294,????"percent_synced":?100,????"synced_balances":?[????????"[NEO]:?100000000.0?",????????"[NEOGas]:?74589.9996",????????"[NXT2]:?2500000?"????],????"public_keys":?[????????{????????????"Address":"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",????????????"Public?Key":"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"????????}????],????"tokens":?[????????{????????????"name":?"NEXTemplate?V2",????????????"symbol":"NXT2",????????????"decimals":?8,????????????"script_hash":"0xa3640dd3c560c75528e5f861da5da98958d0d713",????????????"contract_address":"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"????????}????],????"claims":?{????????"available":"0.0",????????"unavailable":"7730.0"????}}

10. 看来可以开始部署了。再次提醒,钱包密码是coz。

neo>?import?contract?main.avm?0710?05?True?False?contract?properties:?1Please?fill?out?the?following?contract?details:[Contract?Name]?>?MyFirstNEOToken[Contract?Version]?>?1.0[Contract?Author]?>?Richie[Contract?Email]?>?babierichie@hotmail.com[Contract?Description]?>?First?NEO?TokenCreating?smart?contract....?????????????????Name:?MyFirstNEOToken???????????????Version:?1.0???????????????Author:?Richie?????????????????Email:?babierichie@hotmail.com???????????Description:?First?NEO?Token?????????Needs?Storage:?True??Needs?Dynamic?Invoke:?False?{????"hash":"0x4e9b87c96158a8e2cc4b74794f727b38947e9862",????"script":?"...",????"parameters":"0710",????"returntype":"05"}Used?500.0?Gas-------------------------------------------------------------------------------------------------------------------------------------Test?deploy?invoke?successfulTotal?operations?executed:?11?Results:[]Deploy?Invoke?TX?GAS?cost:?490.0?Deploy?Invoke?TX?Fee:?0.0?-------------------------------------------------------------------------------------------------------------------------------------Enter?your?password?to?continue?and?deploy?this?contract[password]>?***[I?180914?11:03:33?Transaction:613]?Verifying?transaction:?b'9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114'Relayed?Tx:?9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114

11. 使用给定的哈希值验证交易。 注意:不同机器的哈希值是不一样的。

neo>?tx9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114{????"txid":?"0x9d63e8977edb6448b7d9efa93e0ff0258324ab3b530d3848def4b29dd6569114",????"type":"InvocationTransaction",????"version":?1,????"attributes":?[],????"vout":?[????????{????????????"n":?0,????????????"asset":"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",????????????"value":"25493.9997",????????????"address":"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"????????}????],????"vin":?[????????{????????????"txid":"475a091ccaa6330320a29884f5f8796a260bdba91352dd409d16787b37d8be26",????????????"vout":?0????????}????],????"sys_fee":"4.9e-06",????"net_fee":"489.9999951",????"scripts":?[????????{????????????"invocation":"40510fa6630ef581108057ebe967cd306522466a32eaf068cf3717da1e640b866246c013033e3c878ebf9247a5a3500178b21b126b3af63ed07a86b0d2c4f34c89",????????????"verification":"21031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4aac"????????}????],????"script":?"...",????"gas":?49000000000,????"height":?10302,????"unspents":?[????????{????????????"n":?0,????????????"asset":"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7",????????????"value":"25493.9997",????????????"address":"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"????????}????]}

12. 交易显示后,再次查看钱包余额。 在步骤9,我们的GAS余额为74589.9996,现在,GAS余额变为74099.9996。 因为这减少的490个 GAS已用于合约部署!

neo>?wallet[I?180914?11:18:38?UserWallet:538]?Script?hashb'#\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":?[????????{????????????"version":?0,????????????"script_hash":"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",????????????"frozen":?false,????????????"votes":?[],????????????"balances":?{???????????????"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b":"100000000.0",???????????????"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7":"74099.9995"????????????},????????????"is_watch_only":false,????????????"tokens":?[???????????????"[a3640dd3c560c75528e5f861da5da98958d0d713]?NXT2?:2500000.00000000"????????????]????????}????],????"height":?10348,????"percent_synced":?100,????"synced_balances":?[????????"[NEO]:?100000000.0?",????????"[NEOGas]:?48605.9999",????????"[NXT2]:?2500000?"????],????"public_keys":?[????????{????????????"Address":"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y",????????????"Public?Key":"031a6c6fbbdf02ca351745fa86b9ba5a9452d785ac4f7fc2b7548ca2a46c4fcf4a"????????}????],????"tokens":?[????????{????????????"name":?"NEXTemplate?V2",????????????"symbol":?"NXT2",????????????"decimals":?8,????????????"script_hash":"0xa3640dd3c560c75528e5f861da5da98958d0d713",????????????"contract_address":"AHao29nmHmJ82Fsj1qDgqtDc2rtQ8u2n2b"????????}????],????"claims":?{????????"available":"0.0",????????"unavailable":?"8652.0"????}}

我们也可以看一看部署好的合约。

neo>?contract?search?MyFound?1?results?for?My{????"version":?0,????"code":?{????????"hash":?"0x4e9b87c96158a8e2cc4b74794f727b38947e9862",????????"script":?"...",????????"parameters":?"0710",????????"returntype":?5????},????"name":?"MyFirstNEOToken",????"code_version":?"1.0",????"author":?"Richie",????"email":?"babierichie@hotmail.com",????"description":?"First?NEO?Token",????"properties":?{????????"storage":?true,????????"dynamic_invoke":?false????}}

13,最后,我们可以尝试使用钱包的密码coz,来调用这个带有合约哈希值的Token。

neo>?testinvoke0x4e9b87c96158a8e2cc4b74794f727b38947e9862?deploy?[]

好了,现在你已经在NEO的私有域上成功的发行了NEP-5Token。

最后

希望对于Gophers来说,能很轻松地照着本教程学习。也希望GO开发人员能加入?NEO’s Discord,一起开发学习。你一定要试一试!

如果您真的需要我的帮助,请在Discord上联系我(LikKee.Richie#5647)

:Richie?Chong,马来西亚人,NEOMY?Community?社区成员校对者:Aaron?Hong,马来西亚人

翻译:包子

原文链接:https://medium.com/coinmonks/neo-token-contract-nep-5-in-go-f6b0102c59ee

使用Go语言进行NEO智能合约及DApps开发教程 | 分享给朋友: