一、啰嗦两句

最近一直都在研究区块链,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) - 一个智能合约的诞生的更多相关文章

  1. NEO从入门到开窗(2) - 智能合约的面相

    一.啰嗦两句 昨天讲了智能合约的一生,那丫长啥样啊?今儿我就跟各位唠叨唠叨. 二.一个简单的智能合约 下面这段就是NEO实例源码里的一个,干撒用的?聪明的你一眼儿就看出来了吧,就是一个所谓域名合约的增 ...

  2. NEO从入门到开窗(3) - NEO编译器

    一.啰嗦两句 第一节的时候咱说了C#编译完了之后,就该NEO的编译器搞事情了.我们完全可以按这个节奏搞,手动用NEO的编译器neon编译dll文件生成指令码文件.avm.但是NEO团队给我们写智能合约 ...

  3. NEO从入门到开窗(4) - NEO CLI

    一.唠叨两句 首先,我们都知道区块链是去中心化的,其中节点都是对等节点,每个节点都几乎有完整的区块链特性,CLI就是NEO的一个命令行对等节点,当然也有GUI这个项目,图形化的NEO节点.节点之间需要 ...

  4. NEO智能合约开发(一)不可能完成的任务

    悬赏任务 兹有如下合约 public static object Main(string method, object[] args) { if (Runtime.Trigger == Trigger ...

  5. 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例

    智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...

  6. 五一劳动节,讲讲NEO智能合约的调试

    之前我们说过NEO智能合约的调试问题,过去了一段时间,有很多东西都发生了比较大的变化.让我们重新再来探讨一下这个话题. 先说日期,2018年4月27日,马上迎来劳动节.   以后可能还会再次谈论这个话 ...

  7. 《区块链DAPP开发入门、代码实现、场景应用》笔记2——Solidity实现简单的智能合约

    本节仅以一个简单的智能合约示例,介绍智能合约的基本组成元素,本合约定义一个uint类型的变量,以及对应这个变量的读写函数. 01 pragma solidity >=0.4.0 <0.6. ...

  8. 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约

    文章目录 安装IBM Blockchain Platform extension for VS Code 创建一个智能合约项目 理解智能合约 打包智能合约 Local Fabric Ops 安装智能合 ...

  9. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

随机推荐

  1. CodeForces - 740C

    这题是思维考察.由于区间个数可能会很多,暴力完全没法下手.首先要明确区间长度最小的就决定了最后的答案,因为最小区间必须要要从0开始到区间长度减1才能满足让mex最大.接下来就是考虑如何填充数组才能让所 ...

  2. docker-compose 完整打包发布, 多服务,多节点SPRING CLOUD ,EUREKA 集群

    这里不再使用 端口映射的方式,因为不同主机上,Feign 根据 docker hostname访问会有问题. 把打包的好jar copy到docker镜像里 有几个服务,就复制几个dockerfile ...

  3. 面向对象的线程池Threadpool的封装

    线程池是一种多线程处理形式,预先创建好一定数量的线程,将其保存于一个容器中(如vector), 处理过程中将任务添加到队列,然后从容器中取出线程后自动启动这些任务,具体实现如下. 以下是UML图,展示 ...

  4. 【前端】Vue2全家桶案例《看漫画》之五、引入axios

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_5.html 项目github地址:https://github.com/shamoyuu/ ...

  5. Linux DHCP原理

    DHCP作用 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应 ...

  6. PCI和PCIE插槽有什么区别?

    PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽.PCI插槽也是主板带有最 ...

  7. nginx重写rewrite的[emerg] unknown directive

    今天写nginx的重写规则.怎么写总是报这个错误.

  8. 关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法

    关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法 题设: 经常使用FusionCharts图表的朋友可能会遇到这个问题.就是在FusionCharts显示的时候有时候 ...

  9. free 或delete后指针怎么样了

    free()和delete()只是把指针所指向的内存释放掉,但是并没有把指针本身删除,也没有把指针置为NULL; #include<iostream> using namespace st ...

  10. 用DriverStudio开发USB驱动程序

    很多写Windows Device Driver的开发人员基本上都是使用Windows DDK进行开发的.但是,现在也有不少人都开始借助一些辅助工具.笔者去年开始接触到DriverStudio,发现它 ...