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 ...
随机推荐
- react-native入坑随笔(持续更新中)
一.问题: 解决方案:删除./node_modules/react-native/local-cli/core/__fixtures__/files/package.json,删除前记得备份. 二.在 ...
- WEB开发-动态验证码
1.基于Python实现,用到了django后台处理,刷新验证码功能,其他语言大同小异 2.登录界面 login.html <!DOCTYPE html> <html lang=&q ...
- sparklyr包:实现Spark与R的接口+sparklyr 0.5
本文转载于雪晴数据网 相关内容: sparklyr包:实现Spark与R的接口,会用dplyr就能玩Spark Sparklyr与Docker的推荐系统实战 R语言︱H2o深度学习的一些R语言实践-- ...
- 利用ffmpeg做视频解码的顺序
这几天在实验室捣鼓着用ffmpeg做视频解码,终于把数据解出来了,虽然还没有做显示部分,不知道解码解得对不对,但料想是不会有什么问题了.回头看看这几天的工作,其间也遇到了不少问题,主要还是对ffmpe ...
- SQL注入攻击三部曲之入门篇
SQL注入攻击三部曲之入门篇 服务器安全管理员和攻击者的战争仿佛永远没有停止的时候,针对国内网站的ASP架构的SQL注入攻击又开始大行其道.本篇文章通过SQL注入攻击原理引出SQL注入攻击的实施方法, ...
- [RPC Fault faultString="Cannot invoke method 'saveOrUpdate'." faultCode="Server.ResourceUnavailable"
1.错误描述 [RPC Fault faultString="Cannot invoke method 'saveOrUpdate'." faultCode="Serve ...
- 【原】Java学习笔记027 - 泛型
package cn.temptation.test; import java.util.ArrayList; import java.util.Iterator; public class Samp ...
- Good Bye 2017 D. New Year and Arbitrary Arrangement
看了别人的题解 首先这题是一个dp dp[i][j] i是当前有多少个a j是当前有多少个ab子序列 dp[i][j] = dp[i+1][j]*Pa + dp[i][i+j]*Pb; i,j 时加一 ...
- dependencies 与 devDependencies 的区别
dependencies 与 devDependencies 的区别 在使用 npm install 安装 npm 包时,有两种命令参数可以把它们的信息写入 package.json 文件: --sa ...
- java暴力递归回溯算法
今天这个问题是我之前一直想解决的,还记得以前第一次上蓝桥杯的课的时候,也就是大一高数期中模拟考试那天,下午去上蓝桥杯课,遇到这道题,当时写了写,根本没有思路,然后就给大一的模拟考试去了.印象深刻啊,一 ...