NEO-智能合约JAVA c#环境
— NEO教程真的坑啊 —
前言
DAPP要迁移到NEO…找了整整两天资料真的是想死,教程几乎是没有的,用户是很少的,文档是没有的,有也是老外写的,哎….
看着官网教程弄的,但是有诸多坑
neo-compiler -> neoj
编译生成用于把.class
变为虚拟机字节码的neoj
坑1
- 对照官网教程,发布配置没有
netcoreapp2.0
选项,没有部署模式
选项 - 编译结果没有
.exe
neoj项目 右键属性 -> 改为目标框架 .NET Core 2.0
输出类型 windows 应用程序
坑2
编译生成的neoj.exe
win7 下报错
发布配置中可以改为win7*64
最终OK
neo-devpack-java -> jar包
java合约编写 与 neoj 需要使用的jar包
坑
由于我是迁移了neoj.exe
的位置,所以按照官网导出会显示找不到文件
我把 \neoj\bin\Release\PublishOutput
(就是有neoj.exe的文件) 放到了别的地方 重命名为neoj
文件夹
这里需要将 neo-devpack-java
中的 org.neo.smartcontract.framework
包 导出的 org.neo.smartcontract.framework.jar
放在neoj
文件夹目录下就可以解决问题。
虽然我觉得官网教程中的 jar包在\neoj\bin\Release\netcoreapp1.1\win10-x64\publish\
,neoj.exe在\neoj\bin\Release\PublishOutput
,neoj.exe也是找不到会报错的,但是懒得去试了,总之都丢到一个文件夹下,neoj才是真正可以用了
创建项目引入包
坑1
创建一个neo合约项目,需要引入包之前编译的jar包,被官网教程各种误导
官网截图的引入包很奇怪,根本不是上面编译生成的org.neo.smartcontract.framework.jar
而是一个neo-contract.jar
的文件
我感觉是有问题的,也没管那么多,引入放在neoj.exe
同目录下的org.neo.smartcontract.framework.jar
按照官网教程的代码,编译转化,成功
坑2
但是后来发现当需要引入其他包的文件时,就会出错。比如neo.runtime
等等
这些函数并不在org.neo.smartcontract.framework
里面,而在neo-devpack-java
项目的其他包中。
解决办法:
- 直接在
neo-devpack-java
项目内新建一个自己的包,直接引用其他包,就不需要编译了。 - 导出
neo-devpack-java
所有其他包变为一个jar(现在知道那个neo-contract.jar是哪来的,就是这一个包,但是竟然没有说明啊啊啊),jar导入到新创建的neo合约项目,就可以使用了
小结
- 导出 org.neo.smartcontract.framework 程序包,只是为了给 neoj 使用
- java内的编写合约引用包,需要neo-devpack-java所有包
- 合约写完编译后成
.java
后,再用neoj转化为.avm
,再用neo-gui发布
如此才是真正的环境弄完了。。。
但是….也并没有用java写…因为java例子太少了…哎…入坑c#也许更轻松…
c#环境
本以为java弄好了挺好的,但是事实是java智能合约例子只有一个
官网API也是.net下c#的,教程也是c#的,就让人很头疼。
决定再三,还是去学一点c#,根据c#的例子来写智能合约
c# 的环境其实在经历过java环境搭建过后没有大坑。根据官网的也是比较详细的,根据它来就可以
坑
但是在编译 c#例子 的时候,两个需要触发事件的智能合约例子出了问题。
问题截图忘保存了,大致就是找不到一个叫mscorlib.dll
的文件
但是,dll
文件是生成了,编译是成功的,但是neon xxx.dll
的时候出现了以上问题
ps.当配置完环境后,c#开发智能合约利用官网的插件,是会在vs2017内直接编译成
.dll文件
,再调用neon命令直接转化为avm文件
在自己尝试后,发现只要把生成的几个dll文件(一般是两个,一个自己的xxx.dll
,一个Neo.SmartContract.Framework.dll
),移动到neon文件夹的目录下用命令./neno.exe xxx.dll
,就可以成功转换
就是目录下找不到一些所用的文件,但是此处只把mscorlib.dll
的文件拷贝到xxx.dll
同目录下也是不行的。可能他还依赖其他一些文件。找到替代方法,也没有继续研究了。