NEO从入门到开窗(1) - 一个智能合约的诞生
一、啰嗦两句
最近一直都在研究区块链,BitCoin,Etherenum, Hyper Ledger Fabric还有今天的主角小蚂蚁,当然出名以后改了一个艺名叫NEO。区块链大部分都是用Golang啊,Node啊,C++啊啥的写的,NEO,Aelf,Stratis这几个用的.Net开发的。NEO算是国内第一的公链了吧,现在运营的也不错,歪果仁里也有很多迷弟。废话不多说了,上干货。
二、源码介绍
NEO的源码在这https://github.com/neo-project
其中可以关注这么几个项目
neo: 核心代码
neo-vm: 运行智能合约的虚拟机
neo-compiler: 智能合约编译器
neo-devpack-dotnet: 工具集
neo-cli: NEO的命令行端,其实就是一个普通节点
neo-gui: NEO的可视端
samples-csharp: C#写的一些智能合约的例子
三、程序猿怎么理解智能合约
智能合约,其实可以和现在流行的serverless挺类似的,尤其是从技术人员的角度来说,serverless只关注你的逻辑,并且是无状态的,需要持久化可以使用平台里的持久化服务。回过头来看看区块链里的智能合约,无非也是你写的逻辑,也是无状态的,持久化的是交易,区块,状态。serverless是啥,云计算机的脚本;智能合约是啥,是区块链这个世界计算机上的脚本。
四、一个智能合约的诞生
NEO的交易和BitCoin类似都是基于栈指令的脚本,怎么理解?BitCoin脚本直接写指令,就是直接写汇编,开不开心,愉不愉快?NEO不这么玩,C#写,JAVA写,Python写,敞开的写,写完了用NEO的编译器neon编译成指令。我现在就在VS里以C#写了一个智能合约,然后都干点啥为主线,写一个智能合约的出生。
1. 开发。安装NeoContractPlugin,写一个智能合约,这方面内容更多看NEO的官网文档http://docs.neo.org/zh-cn/sc/getting-started-csharp.html。合约继承自工具集里的一个类SmartContract,入口就是Main函数,这里有个需要注意的点,就是NEO编译器只关注静态方法。
2. 编译。编译其实涉及到两个部分,基于NeoContractPlugin的模板创建项目时,它已经帮我们做了些事情。首先C#编译器将代码编译成IL,然后在AfterBuild之后跑了一个编译任务ConvertTask,这里面做的事情就是起了一个cmd进程跑neon,即NEO的编译器,生成的avm文件就是neo合约文件。关于编译器里做了些啥,后续咱们将编译器源码,其实就是把你的方法,你的调用啥的翻译成指令,然后存储成二进制文件。
3. 部署。就是把你的合约脚本作为一个交易发布到链上,部署合约生成的合约地址,可以理解成合约的门牌号,不然不知道去哪里调用。
4. 调用。可以通过特性AppCall指定合约地址调用。
五、小结
今儿就先说这么多吧,没有那么详细,后面再逐个点展开谈吧。
NEO从入门到开窗(1) - 一个智能合约的诞生的更多相关文章
- NEO从入门到开窗(2) - 智能合约的面相
一.啰嗦两句 昨天讲了智能合约的一生,那丫长啥样啊?今儿我就跟各位唠叨唠叨. 二.一个简单的智能合约 下面这段就是NEO实例源码里的一个,干撒用的?聪明的你一眼儿就看出来了吧,就是一个所谓域名合约的增 ...
- NEO从入门到开窗(3) - NEO编译器
一.啰嗦两句 第一节的时候咱说了C#编译完了之后,就该NEO的编译器搞事情了.我们完全可以按这个节奏搞,手动用NEO的编译器neon编译dll文件生成指令码文件.avm.但是NEO团队给我们写智能合约 ...
- NEO从入门到开窗(4) - NEO CLI
一.唠叨两句 首先,我们都知道区块链是去中心化的,其中节点都是对等节点,每个节点都几乎有完整的区块链特性,CLI就是NEO的一个命令行对等节点,当然也有GUI这个项目,图形化的NEO节点.节点之间需要 ...
- NEO智能合约开发(一)不可能完成的任务
悬赏任务 兹有如下合约 public static object Main(string method, object[] args) { if (Runtime.Trigger == Trigger ...
- 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例
智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...
- 五一劳动节,讲讲NEO智能合约的调试
之前我们说过NEO智能合约的调试问题,过去了一段时间,有很多东西都发生了比较大的变化.让我们重新再来探讨一下这个话题. 先说日期,2018年4月27日,马上迎来劳动节. 以后可能还会再次谈论这个话 ...
- 《区块链DAPP开发入门、代码实现、场景应用》笔记2——Solidity实现简单的智能合约
本节仅以一个简单的智能合约示例,介绍智能合约的基本组成元素,本合约定义一个uint类型的变量,以及对应这个变量的读写函数. 01 pragma solidity >=0.4.0 <0.6. ...
- 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约
文章目录 安装IBM Blockchain Platform extension for VS Code 创建一个智能合约项目 理解智能合约 打包智能合约 Local Fabric Ops 安装智能合 ...
- 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发
智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...
随机推荐
- JavaScript的this和作用域
本文主要讨论一下JS的作用域和this关键字.作用域,就是你的方法或者变量可访问的区域,是他们执行的上下文.如果你见过这样的代码: function someFunc() { var _this = ...
- python技巧
python小技巧: 1.强烈建议使用Python的r前缀,就不用考虑转义的问题了. 2.正则表达式的使用: test = '用户输入的字符串' if re.match(r'正则表达式', test) ...
- Visual Studio Code搭建python开发环境
开发Python的环境有很多,原来已经在vs2013上面搭建好python的开发环境了,但是vs2013每次启动都占太多内存(太强大了吧),这下出了vs code,既轻量又酷炫,正好拿来试一试开发py ...
- 为你的APK进行数字签名
摘要: 我们需要为 APK进行数字签名,这样才能发布到 Google Play商店.解决方法很简单,使用 Java的keytool命令创建证书并在 Gradle构建文件的 signingConfigs ...
- 视频显示格式720p
720p是一种视频显示格式.字母p意为逐行扫描(progressive scan),数字720则表示水平方向有720条扫描线. 通常720p的画面分辨率为1280×720,一般亦可称为高画质(HD). ...
- BFS POJ2251 Dungeon Master
B - Dungeon Master Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- WPF中使用WebBrowser
最近在做北京现代项目的时候,遇到一个需求将韩国那边写好的网页嵌套到WPF程序中显示. 开始的时候使用的是第三方的浏览器控件:awesomium,在本地测试,显示没有问题.但是拿到客户现场,只显示半屏. ...
- Python基础_文件的的处理及异常处理
今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数 open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...
- (luogu1704)寻找最优美做题曲线 [TPLY]
寻找最优美做题曲线 题目链接:https://www.luogu.org/problemnew/show/P1704 题目大意: 求包含指定点的最长不降子序列(严格递增) 题解 首先我们发现 一个序列 ...
- 【BZOJ2818】Gcd(莫比乌斯反演)
[BZOJ2818]Gcd(莫比乌斯反演) 题面 Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Ou ...