一、啰嗦两句

最近一直都在研究区块链,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. Redis持久化存储

    Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化.redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式:二是Appen ...

  2. windows下用pip安装软件超时解决方案

    以前介绍过ubuntu下更换更新源办法,详情见http://www.cnblogs.com/Alier/p/6358447.html 下面讲一下windows下面pip的配置更改,包括下载软件是超时错 ...

  3. golang调试工具Delve

    Devle是一个非常棒的golang 调试工具,支持多种调试方式,直接运行调试,或者attach到一个正在运行中的golang程序,进行调试. 线上golang服务出现问题时,Devle是必不少的在线 ...

  4. R语言︱贝叶斯网络语言实现及与朴素贝叶斯区别(笔记)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 一.贝叶斯网络与朴素贝叶斯的区别 朴素贝叶斯的 ...

  5. FusionCharts 2D环饼图

    1.静态页面 Doughnut.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...

  6. 过滤Java中特殊字符

    过滤Java中特殊字符 /** * @Title:FilterString.java * @Package:com.you.model * @Description:过滤Java中特殊字符 * @Au ...

  7. Ubuntu12.04LTS安装好后是空白桌面的解决步骤(更新显卡驱动)

    安装完毕启动后,明显慢的要死,登陆后竟然是一个空白的桌面环境,Ctrl+Alt+T 根本没有任何反应.唯一的反应就是右键能够创建文件和文档. 同时打开的窗口没有最大化,最小化及关闭按钮. GOOGLE ...

  8. ls -l 显示年份

    默认情况下ls -l命令只显示月和日,不显示年份: $ ls -llrwxrwxrwx 1 root root 7 Feb 27 16:12 bin -> usr/bin 如要要显示年份,就要使 ...

  9. Python Web-第四周-Programs that Surf the Web(Using Python to Access Web Data)

    1.Understanding HTML 1.最简单的爬虫 import urllib fhand=urllib.urlopen('http://www.dr-chuck.com/page1.htm' ...

  10. haproxy的丰富特性简介

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...