基于以太坊网络的智能合约开发、部署和测试(入门)
为什么80%的码农都做不了架构师?>>>
基本概念:
- 以太坊是一个开放的、公开的区块链平台,允许用户构建自己的去中心化应用在上面运行
- Solidity是一种语法类似JavaScript的高级语言。它被设计成以编译的方式生成以太坊虚拟机代码。因此以太坊智能合约代码又该语言开发
- Remix是基于浏览器的Solidity IDE,可以用于开发一些比较简单的智能合约,当然还有很多其他IDE,此处暂不敖述
- MIST客户端是以太坊的客户端(可用于管理钱包、转账、部署和管理智能合约,链接测试以太坊网络,搭建虚拟的以太坊区块链平台等)
更多资源信息可关注前两天刚写的文章(整理的一些关于以太坊学习资源),初学者会遇到很多各种各样的概念,以及网上的一些资料有些是比较过时的了,学习起来会显得比较凌乱。 主要把握以下几点就行。
- 以太坊技术原理
- 智能合约(DAPP)概念
- 开发语言
- 开发工具
- 开发环境
- 开发框架
准备工作:
- 了解以太坊基本技术原理以及DAPP概念,本文不做分析
- 开发语言选定solidity,可去学习solidity语法和样例代码。http://wiki.jikexueyuan.com/project/solidity-zh/ 或官网教程http://solidity.readthedocs.io/en/develop/
- 开发工具IDE准备,在线Remix访问地址http://remix.ethereum.org, 简单合约开发比较好用。
- 开发环境,开发环境及开发的应用所运行的环境,其实也就是以太坊平台,我们可以直接访问以太坊平台,但是要把应用部署到以太坊平台是要以太坊币的,太贵了。 开发模式下当然有开发环境,下载MIST http://ethfans.org/wikis/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E9%92%B1%E5%8C%85%20Mist%20%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B 参照该文档安装MIST客户端,注意因为是用于开发环境,不需要与以太坊网络连接并下载区块数据,直接启动应用。然后选择建立私有网络。如下图所示:
启用之后,客户端上就会显示当前是私有网络:
启动网络,开启挖矿,因为部署智能合约是需要钱,需要有旷工干活的,咱们就搭建了一个单节点的以太坊网络,这个节点也就是矿工,需要干活。
开启挖矿之后,创世区块,以太坊币就不断产生了。 所有的数字货币都将被自己挖到。
可惜不是真的以太坊,否则就发了!o(* ̄︶ ̄*)o。
至此,个人的以太坊网络,也就是开发运行环境就搭建好了,为了后续的测试,可以创建多个账号。
智能合约应用举例:
为了开发、部署、和测试一个智能合约(DAPP),我们列举一个简单的应用场景。 开发一个应用,该应用可以由我控制发行虚拟货币,并且能够将货币发送给别人。就这么简单。(当然以太坊平台很强大,这只是万里长征第一步,类似HelloWorld)
代码开发与解释:
我们开发智能合约使用的IDE是 基于浏览器的Remix,访问该工具如下图所示:
代码解释如下:
pragma solidity ^0.4.0;contract Coin{// 声明 一个 address 类型 变量 256 bits, 用于 存储启动该智能合约的账户地址。address public minter; // 声明 mapping 类型 变量 类似于 java map ,用于存储账户的资产信息mapping(address => uint) public balances;// 声明 一个事件 ,客户端可以来监听该事件event Sent(address from, address to , uint value);//构造函数,在合约启动的时候执行一次,因此minter保存的是启动该智能合约的账户地址function Coin() public{minter = msg.sender;}//为当前启动合约账号 ,也就是自己发币。每次加20function go() public{//如果不是启动合约的账号 则返回,即别人无法给自己发币if(msg.sender != minter) return; balances[msg.sender] += 20;} //为指定账号发币function mint(address receiver) public{//只有自己可以发币 其他账号调用无效if(msg.sender != minter) return;balances[receiver] += 15;}//账号之间发送货币function send(address receiver) public{uint amount = 15;if(balances[msg.sender]<amount) return;balances[msg.sender] -= amount;balances[receiver] += amount;Sent(msg.sender, receiver, amount);}
}
代码编译:
使用Remix对代码进行编译
代码调试与测试:
选择右上角run标签,模拟参数都采用默认(默认会生成一个账号),点击create,即模拟部署智能合约代码。create成功后,右下角则会出现部署好的合约(包括合约地址以及合约方法)
测试为自己发币:
点击go方法按钮,控制端会显示已经调用成功
为了验证查看是否成功给自己发币,可以通过查询balances变量,在balances按钮右侧输入我的账号地址,进行查询,如下图,由于我点了八次(每次发币20),所以我的账号余额是160.
注意,此处需要了解如何获取账号,个人账号其实就在,如下图所示:点击右侧复制按钮可以获取账号字符串。该账号也是部署合约的账号。当时复制到的账号信息只有20个字节,而address类型是需要32个字节的(因为address的地址是256bits的),那么我们就需要对该地址进行补全去查询,在地址前端补24个0即最终用于查询的账号地址是0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733c
测试为别人发币:
点击mint按钮,随意写一个别人的账号,比如为0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b
验证发币结果:
在balances右侧输入别人账号0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b,点击查询,如下图所示,发币15.
测试发送数字货币:
由当前合约部署者(自己)给别人转币,在send按钮输入别人账号0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b,点击send按钮,转15个币过去。
验证转币结果,之前自己有160个币,别人有15个币。 转15个币过去后自己有145,别人有30.如下图所示。
部署到以太坊平台(搭建的单点开发环境):
打开MIST平台,创建两个演示账号A,B 。其中A账号用来部署智能合约, B账号为别人的账号。用于测试发币,和传输货币。打开MIST的智能合约界面
点击DEPLOY NEW CONTRACT创建新的智能合约:
代码拷贝完成之后,就会进行自动编译,并生成合约,如下图所示,合约名称为Coin:
选择该合约,然后再页面最下角,点击部署,部署的时候需要输入账号密码:
部署成功后,点击智能合约界面即可查看到:
测试部分 就不做了,跟Remix很类似。
转载于:https://my.oschina.net/yjwxh/blog/1626312
基于以太坊网络的智能合约开发、部署和测试(入门)相关推荐
- 元宇宙应用开发实例——以太坊里的智能合约和Decentraland里的3D前端交互组件
目录 1. 元宇宙核心技术 2. 元宇宙实例及应用实例 3. 以太坊里的智能合约开发 3.1. World Wide Web的访问能力 3.2. 初始化以太坊钱包 3.3. 开发4方合约 3.4. 手 ...
- 以太坊可更新智能合约研究与开发综述
原文地址:https://ethfans.org/posts/ethereum-upgradeable-smart-contract-strategies 这篇文章是对以太坊可更新智能合约领域里的研究 ...
- 基于以太坊的58同城 | DApp开发与应用案例
基于以太坊的58同城 | DApp开发与应用案例 今天,Origin开发团队很高兴地宣布在以太坊Rinkeby测试网络上推出Origin Protocol Demo DApp ! 在这个DApp中,你 ...
- 以太坊—开放的智能合约完整解决方案
什么是以太坊(Ethereum)? 通俗的讲,以太坊是一种新的法律.传统的合同合约依据法律订立,执行.违约处理依赖律师.法院:以太坊解决了这一系列问题,合约通过程序订立.执行,人工无法干预,所以几乎可 ...
- 区块链入门文章二《以太坊:下一代智能合约和去中心化应用平台》
以太坊:下一代智能合约和去中心化应用平台 以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有 ...
- 基于以太坊ICO的安全合约架构
基于以太坊ICO的安全合约架构 概述 随着比特币.以太坊的崛起,通过ICO来筹集早期资金的项目越来越多.其中,大多数项目都采用基于以太坊的ERC20 token来发放代币.以ERC20 token为标 ...
- 3.25 以太坊:实战智能合约众筹1
这次我们来看看怎么实现以太坊的众筹智能合约案例,首先我们了解一下下面的概念 1.什么是ICO? ICO是以初始产生的数字加密货币作为投资回报的一种筹措资金的方式,它的概念源自证券界的Initial ...
- 比特币开发者:BSC可能会超越以太坊成为顶级智能合约平台
比特币开发者Udi Wertheimer发推称,我觉得这是以太坊作为顶级智能合约平台的最后一个周期了. 昨天币安智能链(BSC)结算500万ETH,以太坊本身结算700万ETH左右.这可能会很快结束. ...
- solidity开发以太坊代币智能合约
智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...
最新文章
- ECCV 2020 | PHOSA:一种基于单目图像的人-物重建方法
- 软件Trimmomatic
- 前端学习(1896)vue之电商管理系统电商系统之修改用户状态
- sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析
- 使用.NET Framework的配置文件app.config
- 微信小程序怎么在wxml中插入多个图片_闲聊微信小程序开发框架(二)
- android编译 预装apk,Android系统使用Shell脚本预装apk
- LCN根据官网改造本项目失败案例
- matplotlib绘制李萨如图(三) 静态3D李萨如图
- jieba分词工具的使用-python代码
- 实践系列:分销平台的技术架构
- ios 保存图片到相册 崩溃_iOS保存图片到相册
- True Launch Bar 4.2 注册码
- jmeter汉化仍有英文_【jmeter】Jmeter 修改启动默认语言:将英文版修改为其他语言版本...
- Ubuntu 16.04下通过系统软件商店安装flameshot后无法启动问题解决方法
- 数据结构(二)——栈及实现、括号匹配
- 虚拟机与宿主机之间的网络共享问题
- 大数据技术之高频面试题
- 炉石传说201909-3 元素选择器201809-3
- 微众银行七年,从拓荒者到深耕者
热门文章
- Android RecyclerView详解
- Color types not allowed (at ‘drawable’ with value ‘#f0f0f0’)
- android synchronized的使用
- 【Avalon】Avalon笔记(解析Dom模板树,按自己的规范)
- Dalvik class加载的处理
- Android开发--真机调试出现device offline提示
- 创建型模式—原型模式
- 课堂练习:返回一个二维数组中最大子数组的和
- DAO、Service、Controller及View层级结构梳理
- textFiled输入字数的控制问题之—把带输入的拼音也判断了