Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

如何用 C# 编写 NEO 智能合约

chespher
122 0 0
开发工具
) {" U$ i0 G  ^. J, ^0 p! V4 I0 W# ]) c$ |2 d
    VisualStudio2017: @" |/ f$ x  Y
( V3 m7 D- Q1 e) V4 q
    VisualStudio下载地址,安装或者更新到最新版) z8 ^4 y; P# Z' q6 B
* h: c5 r! a/ f: v7 ~4 E# w* P
    安装过程很简单,直接按照提示一步一步操作即可,需要注意的是在安装时需要勾选.NETCore跨平台开发,安装大概需要十几分钟或几十分钟:
% ]  d4 b- K& A1 L; g, J" V; [& H' Y( }3 u: N7 g0 N
    VisualStudio2017安装(勾选.NETCore跨平台开发)
6 _* ~% G, ^7 E7 Q1 d8 p  X! `& B3 b$ b7 H/ p# }
    VisualStudio安装成功
" F5 P% m! y2 e5 x4 a3 L$ H# k
0 _# v( h7 N2 ^    安装NeoContractPlugin插件. I, I1 X- Z9 a. u. s. C

& p2 u$ |1 f$ i2 U5 A/ f    打开VisualStudio2017,打开工具,扩展和更新,在左侧点击联机,搜索Neo,安装NeoContractPlugin插件(该过程需要联网):
& z# _8 m- F5 m5 ]9 |& ?, ~3 t" Y$ Y  J, m2 L
    工具->扩展和更新3 f% s) D* b) L+ G

2 X0 D! R0 ^% X7 _+ l" F    联机->搜索“Neo”->下载“NeoContractPlugin”" p; B; S& Q# l

9 P6 ^) z' w4 J) t$ T7 H    下载好后,关闭窗口,并关闭VisualStudio,在弹出的窗口上选择“修改”:
& L1 O2 I- W7 m+ w4 i0 x3 w7 u
5 p, i  u/ S) t    关闭VisualStudio->选择“修改”
& R6 ]* \$ J2 B+ R) Q; V9 J4 b4 D; N9 r& M% ^; c& i
    关闭窗口
  r" o2 P+ i5 X* k1 K( ^' R: @0 a# p+ K% ?" S& w
    neo-compiler* M4 X! g+ }# L# r3 @( F1 g$ ]: y

# l5 |& G0 f# A1 G' `) Q" E# l9 F    在Github上下载neo-compiler项目,用VisualStudio2017打开该解决方案,发布其中的neon项目:- n3 ]) U* F: w8 o2 B! i/ M  N( _

& Y3 f/ C+ l/ o7 K* H( G1 K: T; `    文件->打开->项目/解决方案! D& S/ ?: l/ b' z3 @5 u) F

5 Q  y, K8 Q9 E) s    选择刚刚下载的neo-compiler项目. P) {, G9 @$ Z5 q$ {9 W" h3 ~

& C2 D! e$ H) t2 g' _9 K    打开后的界面(右侧)
( _% @: W3 t- u; d+ {/ t5 J- ?6 a# {  ^
    选中neon
* f) Y5 l$ ]- c# T4 n: f1 ~) D9 A) I" |7 S
    右键->发布4 v: U" X1 I) ?5 ?; z
$ |( S3 K9 a+ R% G1 i, v
    Configuration和TargetRuntime两个参数根据自己的需要修改并保存
2 x# n5 N6 ~& t1 }& a% O% R3 C1 X9 k5 j
    neon项目默认的发布平台为win10-x64,如果你不是Windows10系统,需要修改发布平台,用文本编译器打开neon.csproj文件,将win10-x64更改为目标平台,如win7-64,然后用VS重新发布该项目即可。详细RID可以参考.NETCoreRuntimeIDentifier(RID)catalog5 y9 i5 z, L6 }  W7 n) w  R. o2 ]

6 {' d5 z' E5 g, Z/ U    点击发布4 h5 g7 D5 G4 F' _; H

# o4 s( d. T) {  n: p    发布成功
9 ?! h; \& r: i  `0 D% C. r; H0 h) Y' F
    【注】在发布过程中遇到的问题:
2 a* {$ [" T6 l' V. {& v9 r% d1 z: \9 a# o& f
    发布失败9 ~' r# F( i5 l% m! G
, a* Z  M) x- `; p- Z3 e
    tmp966A.tmp
4 V' y1 {$ a! l1 G* z' h2 U  N8 z0 g* K# p8 F5 K1 C/ n
    咨询NEO的开发人员,说是vs2017和dotnetcore这块有点问题,建议我使用命令行发布:
) t3 r3 Q4 W; w! R) Z& X+ W
. ]# f: F, F  s7 G    进入neon目录
9 z) [1 k' y3 `1 i
  h9 I7 s! u  w6 ?* h    运行命令:dotnetpublish-rwin10-x64-cdebug) _8 }. K5 f2 U2 D5 H

  ^: f, \6 w8 o! M* n4 U    r参数c参数可以根据你的喜好填写
4 q# F2 A& i1 R% ^- G4 [0 V9 Y5 J# L) O
    运行命令dotnetpublish-rwin10-x64-cdebug
7 R2 C- f# s7 d% G9 p" E: F
( Q. b+ o! l' J. k4 H- B    验证是否成功,到该目录下查看是否有exe文件,有的话就说明成功了:
+ L1 L8 L' [1 f( b- P+ o1 {: n  b( [- \, }$ A7 L6 j% O7 Y
    C:\Users\Allen\Downloads\neo-compiler-master\neo-compiler-master\neon\bin\Release\netcoreapp1.0\win10-x64\publish\
5 `* ~( U- f3 ]" Y6 t+ @
7 `4 E6 E& l' |$ {1 Q7 L" c, f    存在neon应用程序文件
) Q2 M4 k7 k8 M4 G6 V9 i, h8 B, U+ m
    命令运行成功后,重新点击一下“发布”按钮即可。
- ?+ k! C1 A+ `; s) k1 L6 ~
4 s' f1 X: G  E8 _) h    修改环境变量
7 j( t7 S) |) E/ h  H) w8 i! q, p$ O; i
    发布成功后,会在bin\Release\PublishOutput目录下生成neon.exe文件:6 z- W( H# _0 r! F
, ^( S2 j  |2 _: r- K
    bin\Release\PublishOutput
6 Z; `& k+ O. w# E9 E
" B5 k- f2 ?4 B' G    然后需要添加path,让任何位置都能访问这个exe程序:
: h/ U( S+ k9 ~/ O( V* P2 H$ \" U. o% h' c7 u% U2 v) r
    打开文件资源管理器->此电脑->属性:
& j" n0 Y$ X5 \6 S$ W$ Z
4 F1 v1 H5 ]7 g$ d: T# f    计算机->属性8 y$ E* j1 M$ t- F+ q2 {
* W# k1 O6 G( U# r2 c4 @) [  n3 b
    点击“高级系统设置”,选择“环境变量”:
9 `4 V- l9 ]4 h9 }8 X* I; Q
, g4 ~0 `* T1 \    高级系统设置->环境变量
3 y. I6 A% q: v: e6 [; R- q' ^' L/ H  W! Q& H4 w# v" r/ ^0 w
    环境变量界面" L  _( a5 g+ e9 |4 F2 g2 ~

; {: v* D5 x; ^% z$ p4 B    选中系统变量中的Path,点击“编辑”:
9 V- g5 r( v  V6 q8 L6 |
% s) g; W: A2 z" k, i6 B" Y* G    Path->编辑
. q1 [4 W& I$ k, p+ C% P" |0 g' \( w) E3 M4 r. x6 z
    新建5 q* k7 C) F& Z# d" Z! t" X! i

: j% @; X: g/ T, R: v5 K0 j, K    拷贝该路径
( i2 G- p" R5 x; h7 `! T, O4 y* L5 e! J% r2 ^  w
    粘贴并确定$ S1 `/ P& j: a. K
' E. \7 }# n4 @  M  J3 ~
    再次确定
; n  m2 n4 K" u* U7 [- F8 L, L+ [$ u. G! l/ B& A/ t
    添加完path后,运行CMD或者PowerShell测试一下(如果添加path前就已经启动了CMD则要关掉重启),输入neon后,没有报错,输出如图所示的版本号的提示信息即表示环境变量配置成功:& H9 v- x- ^% V0 ^; O8 {

( u( I2 `7 Z& q6 P" [5 C    验证环境变量是否配置成功( `: O( x! v: j  k3 b- h: ]
$ {& ]" Y8 s! i' F/ c+ ?4 X. K
    创建项目
' u! y* }3 y6 e/ D! Y. w1 d7 I" I. i  F% i' F$ E6 b* W+ d
    以上四步安装配置成功后,即可在VisualStudio2017中创建NEO智能合约项目(.NETFramework版本任意):
7 ~6 T  \; P2 d2 P: j' _7 n9 e, h( l' @6 A0 W: M
    新建->项目
% p2 F" z; c) N  Y5 e" K/ b1 O6 l5 u5 X! I/ X" b
    创建NEO智能合约项目
' P  s2 @8 w6 a* {8 ?. x. T7 H6 R
( n5 j7 X' b( m6 t2 M+ C6 I2 C) K$ {    创建项目好后,会自动生成一个c#文件,默认的类继承于SmartContract:
% ]8 A# a! a  n8 ]7 G3 M  z. R# |* w; A& I( U
    智能合约c#文件
* |4 {& d- D5 ]4 b" n4 Y$ p  R! R* Y+ \* W8 ]' A
    出现错误:新建的NeoContract项目找不到Neo命名空间. F# t' N; d7 Z" N) g3 D

8 b# Y. c1 E! P# t7 ?    解决方法:- n, C: C$ q# b4 b. j  H# p

$ a/ S, g* b# c6 n* Z: G% a' X* ]    在VS中右键解决方案文件,点击“还原NuGet程序包”,这时在“输出”面板会看到“正在还原NuGet程序包…”。所有程序包已经还原成功后,如果代码仍然报错,并且右侧“引用”中仍有个感叹号,可以尝试双击感叹号:
2 b$ F; h1 ]# r+ H
2 I1 a; R% y8 r4 U    还原NuGet程序包
3 N' w2 w9 J% _9 Z
& \9 W$ }+ ^3 s3 i9 t! c* w. F    双击“引用”中的感叹号- U5 K1 M; G/ k6 {7 j9 b6 c
0 w# C4 ^7 A6 A# O" m( G6 m2 t: v! q
    错误解决6 K7 ]0 t6 Y4 Y# z! `

# x: ]# F+ ?, R5 o, l    编译项目
# I, j+ ]" v* t8 o  W2 ]! N( a. G/ n0 y$ M5 I2 j
    点击菜单栏上的“生成”->“生成解决方案”(快捷键Ctrl+Shift+B)开始编译程序:7 W3 ]& M6 a5 {( M7 A: o0 k: H- \

0 t7 P. q# y' N! z+ Y; I3 i    生成解决方案
- K4 p1 Q* n  n4 ]! s4 ]2 {% K
) J* {5 X1 j" b  p    编译成功
* Q: m- n6 \1 o! v  t+ a3 y
5 f7 g; [6 d0 g. U$ V  ]$ Z+ m    编译成功后你会在该项目的bin/Debug目录下看到生成的项目名.avm文件,该文件即是生成的NEO智能合约文件:4 G5 ]  I; {! `7 a" \! K5 G) P
" H5 m, P- C5 Q7 |7 I  D( q/ X
    智能合约文件(项目名.avm)
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

chespher 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2