Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

chespher
70 0 0
开发工具
3 `! @; z/ q/ C6 Y; M' s. u$ P& K+ M1 J9 `$ u, C+ k& N! i
    VisualStudio20177 M( A9 f' `" Y8 Y- X+ q: v& S
6 m1 X3 ^& z8 o' [
    VisualStudio下载地址,安装或者更新到最新版/ G- z5 _2 y1 [3 Q' X- i1 \
1 b' |# U2 _2 S: z
    安装过程很简单,直接按照提示一步一步操作即可,需要注意的是在安装时需要勾选.NETCore跨平台开发,安装大概需要十几分钟或几十分钟:
& g6 }4 d  x4 @9 S+ [- X( x$ m* K/ s* V6 s. Q6 j" |
    VisualStudio2017安装(勾选.NETCore跨平台开发)
: \2 C; W" B/ |: t' c, ]- ?. A
  @4 V, c* {/ p+ n& Z' y    VisualStudio安装成功  [8 z  J$ V% C) R% [9 S: G

# i; I2 U% g3 M- E6 C: @    安装NeoContractPlugin插件
0 q  E) u. ?0 |/ k5 e# p9 G" o2 u; J3 k# J! R0 g
    打开VisualStudio2017,打开工具,扩展和更新,在左侧点击联机,搜索Neo,安装NeoContractPlugin插件(该过程需要联网):
# r: T/ c6 A% K+ Y
9 D# |( J9 T4 z! X6 C/ ^8 u    工具->扩展和更新+ X5 i1 f% r- X" }: {. A/ K0 C' V

: D  \: {/ R$ R# j6 D7 z! j2 _5 Q    联机->搜索“Neo”->下载“NeoContractPlugin”) K% Q% `8 `. F! N5 ~5 `' C- z% Y
6 E  ?+ T, q5 D
    下载好后,关闭窗口,并关闭VisualStudio,在弹出的窗口上选择“修改”:! B) h  V# O2 g" u: b2 ~4 J! z0 C. D: M

# V/ O, Z) q5 i( o% [3 X3 e$ h    关闭VisualStudio->选择“修改”
% S3 ?- ?4 [/ |: b# q
% |% J2 q, S: o2 y) Q% }    关闭窗口: p3 {7 ^% s* j8 d: ~: U
$ n; ]7 M9 E- M7 I+ N6 s- X
    neo-compiler3 H* i5 ^7 w7 Y2 u& q; x# j
! |, I: |5 u/ P+ X, p8 V+ i$ N1 U
    在Github上下载neo-compiler项目,用VisualStudio2017打开该解决方案,发布其中的neon项目:5 }# `/ P8 Z$ ]1 Y' Q* S/ `8 n

4 |1 ^( `6 g; g# B% o5 P& H8 G    文件->打开->项目/解决方案1 q8 o, i, L0 u/ B3 ~" R) j
/ u$ J8 e( S. n1 n# Z+ K
    选择刚刚下载的neo-compiler项目
, K) T: B  Q; [9 p8 h5 w( ^
8 [( M4 R4 S1 W" l    打开后的界面(右侧)
1 O9 W$ @- N& ?! d& M3 |+ M  u  u: K! {
    选中neon
/ Q6 z+ P; U1 `( S, j" f% q. z* H3 L0 L2 o
    右键->发布
2 z9 W' H5 K. f0 _) V4 D2 H# W- ~2 A8 L! M1 T* r6 Q6 n
    Configuration和TargetRuntime两个参数根据自己的需要修改并保存& N) ]* k' J: Y' ^7 n

% w  m$ I9 j3 \7 h. }8 r! c    neon项目默认的发布平台为win10-x64,如果你不是Windows10系统,需要修改发布平台,用文本编译器打开neon.csproj文件,将win10-x64更改为目标平台,如win7-64,然后用VS重新发布该项目即可。详细RID可以参考.NETCoreRuntimeIDentifier(RID)catalog
; X0 u5 F( ]% E2 ?: u1 u
& r: b6 o. B% d" F1 G    点击发布
9 S( M5 c) ^/ M( G# Y. v$ g6 n! ~1 J! m3 m* I. `8 Z( D
    发布成功" u) t/ h# Q1 i9 K* [( y
' N# z6 o; Z2 S+ P+ q, x9 e' u
    【注】在发布过程中遇到的问题:
8 R' E- Z, q2 n: ~' N
# t0 A9 _2 H% K/ c5 p2 d$ E( v7 a    发布失败
1 T$ u8 v; [4 ~, z1 ^: j2 s! P  z; H* T. Q
    tmp966A.tmp$ E- W  A) q$ s  `$ T

6 d% L  \, C: X/ X6 K" {    咨询NEO的开发人员,说是vs2017和dotnetcore这块有点问题,建议我使用命令行发布:1 b1 K/ {  M0 Z( g0 B6 F

1 a# E/ O- y. ]" E+ Y    进入neon目录
" c, _/ t" ?) P  Y  J3 b; s0 r7 p$ P3 e5 m% }! I  [/ g
    运行命令:dotnetpublish-rwin10-x64-cdebug
0 I/ F* a* V& W. H( o8 y) r- h( \8 V- \! w6 V
    r参数c参数可以根据你的喜好填写
5 |1 t# _& ?( l. K
& r3 L& e5 x' z/ B2 o% W5 s    运行命令dotnetpublish-rwin10-x64-cdebug
0 V' _4 L1 z! Y' Y; [" @) ^
  s/ s/ H0 Q! V7 F$ `    验证是否成功,到该目录下查看是否有exe文件,有的话就说明成功了:
+ d$ A; o( t: J4 D- e& w% B& o; J! r* Z; H; {$ s% I* C
    C:\Users\Allen\Downloads\neo-compiler-master\neo-compiler-master\neon\bin\Release\netcoreapp1.0\win10-x64\publish\
' J/ v; t& N7 ]( ^! h; R9 K2 V" p/ s
    存在neon应用程序文件
9 V$ L5 s$ {6 J. ^( t
- k8 p) ~2 ?+ z- x" `    命令运行成功后,重新点击一下“发布”按钮即可。
" t( w7 O* g) z+ P! L7 O6 E# _2 u- s/ l6 d% L0 C
    修改环境变量
% S' p2 M" H' v, W! \
8 ^. D, `, S) [! f' M    发布成功后,会在bin\Release\PublishOutput目录下生成neon.exe文件:
1 s  n# Q1 }& ?$ A1 F# j( ]8 K. F0 h. s- c$ ~9 H( n1 B+ g
    bin\Release\PublishOutput
2 ?( ?6 }1 p& E) A3 t5 n7 F# Q9 r, P5 a1 L# u" Q5 H8 \# B
    然后需要添加path,让任何位置都能访问这个exe程序:
6 P' z2 l. N# G/ ~2 C* a4 J) `0 a5 ^- o' Y! T
    打开文件资源管理器->此电脑->属性:
+ f8 P6 w2 S( ]
3 d& q, D5 X6 }- @    计算机->属性
" _; J2 y: q: m1 U* a5 V+ \& l. W/ p' \: |6 `7 }
    点击“高级系统设置”,选择“环境变量”:
& d$ [6 n+ K2 r2 ?/ v
. X! J. p- S; H' ~  o: e0 V# o) w    高级系统设置->环境变量
$ o2 v& \- ]. {% _( c1 w2 x& h
4 t+ [% @9 T3 V4 a/ M    环境变量界面# i: k) z  A& g) |
% }7 h6 \# O0 k/ B- b( l& K
    选中系统变量中的Path,点击“编辑”:+ C2 E* ^' B9 V4 N

5 x3 }4 J: Z- A9 c# u* e: C8 ~    Path->编辑9 T3 V. O9 y: ?# @; b

7 X# |  c  m, X* h$ B  n! T    新建& t) O* I. y: j& P# K
6 N+ D4 x" y8 ^9 t+ F( g
    拷贝该路径
! N" Y# a% m  s3 b+ G7 Y  g  i5 P/ g3 `  t+ U+ @1 |
    粘贴并确定4 W5 v$ h* V4 f* ~
7 o9 V) g) F) ^7 T+ u- H
    再次确定& A2 S% Q/ H0 w

* k3 [# t5 D7 y+ x! D    添加完path后,运行CMD或者PowerShell测试一下(如果添加path前就已经启动了CMD则要关掉重启),输入neon后,没有报错,输出如图所示的版本号的提示信息即表示环境变量配置成功:2 h# R; l# H/ P! q1 h* J9 V  d
! \& J2 |/ b5 ~' T
    验证环境变量是否配置成功+ ~/ Y% h9 p. d# i* \

4 ?4 |. Z0 M- x2 B1 k& U% T3 H    创建项目$ i' o- Y% s, A  S/ ]. |
/ e8 S5 U  }- z. ^) s' k- V. y
    以上四步安装配置成功后,即可在VisualStudio2017中创建NEO智能合约项目(.NETFramework版本任意):
, ~! l0 g) W# A7 d7 }- p- T" Y7 {; a/ `& E5 g7 |( w  N: z, J/ k, Q
    新建->项目# P7 t0 {' C  ~7 k
' j1 O* U# @, l& j) B4 z# ~: Q
    创建NEO智能合约项目
& X7 o- Q- R& P; _! }% _% D! V+ d/ J  l& e, z/ ^! F
    创建项目好后,会自动生成一个c#文件,默认的类继承于SmartContract:/ R( @9 Q  v' A
3 {: ~" E+ R  t
    智能合约c#文件/ s- @7 h0 D  b/ F- ~  T8 \8 [

  E0 Y/ G1 N/ G5 Y9 h& Y    出现错误:新建的NeoContract项目找不到Neo命名空间
8 Y$ Z$ K% i7 F, U+ i) {4 w0 Z: a9 A5 R$ h2 t3 Z7 ^: K
    解决方法:( a+ g! x' c% k% \* Z

0 F9 _; K9 P7 B" G: y9 L    在VS中右键解决方案文件,点击“还原NuGet程序包”,这时在“输出”面板会看到“正在还原NuGet程序包…”。所有程序包已经还原成功后,如果代码仍然报错,并且右侧“引用”中仍有个感叹号,可以尝试双击感叹号:
# z8 Z  ?' u/ R' L
4 v* n+ m, G: m$ h! r7 f# V5 g+ d: x" n    还原NuGet程序包
( D. |( f0 _5 |8 Q+ s' |' Z, _
# ]8 l9 k5 [( ~6 z2 U% q' A    双击“引用”中的感叹号
7 |6 a( U5 D3 Q# Q2 J5 H+ ]+ W* E3 O- f  y: @, h0 a2 m2 g1 W; [  {
    错误解决4 T6 ^5 F8 a3 z0 k

) l  l) Z8 }" E    编译项目/ _$ l" R  m" A

- a" I, S: K% e+ R1 m& f. ~    点击菜单栏上的“生成”->“生成解决方案”(快捷键Ctrl+Shift+B)开始编译程序:2 ~; _7 ^5 a. [. O. |2 A

' M6 P. X0 B9 C    生成解决方案' H7 ]4 Q# i5 i+ w7 x) Z5 ?

$ J' R# L! y; t* H0 h  `    编译成功) G" i8 p9 _1 m

7 b4 T' }: h8 d4 m3 Z* B7 b    编译成功后你会在该项目的bin/Debug目录下看到生成的项目名.avm文件,该文件即是生成的NEO智能合约文件:! O! o4 s& d% R  f  b" D

# a' y+ p& @( \& G    智能合约文件(项目名.avm)
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

chespher 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2