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 ...
随机推荐
- CodeForces - 727E Games on a CD 字符串Hash
题意:有n个单词,每个单词长度为k,顺时针将它们写成一个圆圈串.现在知道g个长度为k的单词,是否可以从这g个单词中选择n个形成这个圆圈串?如果有多个答案,任意输出一个. 思路 可以发现,如果枚举第一个 ...
- AC Dream1069
这题的加密字符 - (Fibnacci % 26),如果得到的字符小于'a',就等于加密字符 - (Fibnacci % 26)+26. 获得题目的函数如下: void getItem(){ char ...
- day6(列表操作、列表练习题)
一.列表操作 a) 循环 基本语法 for i in value : L1 =['a','b','c','d',1,2,3,4,5,6,'b','D'] for i in L1: print(i) ...
- Servlet中forward和redirect的区别(转)
forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response); red ...
- 迁移学习︱艺术风格转化:Artistic style-transfer+ubuntu14.0+caffe(only CPU)
说起来这门技术大多是秀的成分高于实际,但是呢,其也可以作为图像增强的工具,看到一些比赛拿他作训练集扩充,还是一个比较好的思路.如何在caffe上面实现简单的风格转化呢? 好像网上的博文都没有说清楚,而 ...
- SAS︱数据索引、数据集常用操作(set、where、merge、append)
代码部分大多来源于姚志勇老师的<SAS编程与数据挖掘商业案例>. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ ------------ ...
- Android常见Crash类型分析(一)
问题1. java.lang.IllegalStateException: The specified child already has a parent. You must call remo ...
- Windows7 64位安装最新版本MySQL服务器
Windows7 64位安装最新版本MySQL服务器 近期,一直在研究MySQL数据库,经常修改配置文件,导致MySQL数据库无法使用,不得不反复重装MySQL数据库.以下是在Windows7 64位 ...
- Struts2(三) 配置struts.xml的提示(在不联网的情况下)
开发过程中如果可以上网,struts.xml 会自动缓存dtd,提供提示功能.如果不能联网需要我们配置本地dtd,这样才能让struts2 产生提示 1.首先,在EClipse中依次点击工具栏中的wi ...
- Codeforces Round #432 Div. 1 C. Arpa and a game with Mojtaba
首先容易想到,每种素数是独立的,相互sg就行了 对于一种素数来说,按照的朴素的mex没法做... 所以题解的简化就是数位化 多个数同时含有的满参数因子由于在博弈中一同变化的,让他们等于相当于,那么这样 ...