为什么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

基于以太坊网络的智能合约开发、部署和测试(入门)相关推荐

  1. 元宇宙应用开发实例——以太坊里的智能合约和Decentraland里的3D前端交互组件

    目录 1. 元宇宙核心技术 2. 元宇宙实例及应用实例 3. 以太坊里的智能合约开发 3.1. World Wide Web的访问能力 3.2. 初始化以太坊钱包 3.3. 开发4方合约 3.4. 手 ...

  2. 以太坊可更新智能合约研究与开发综述

    原文地址:https://ethfans.org/posts/ethereum-upgradeable-smart-contract-strategies 这篇文章是对以太坊可更新智能合约领域里的研究 ...

  3. 基于以太坊的58同城 | DApp开发与应用案例

    基于以太坊的58同城 | DApp开发与应用案例 今天,Origin开发团队很高兴地宣布在以太坊Rinkeby测试网络上推出Origin Protocol Demo DApp ! 在这个DApp中,你 ...

  4. 以太坊—开放的智能合约完整解决方案

    什么是以太坊(Ethereum)? 通俗的讲,以太坊是一种新的法律.传统的合同合约依据法律订立,执行.违约处理依赖律师.法院:以太坊解决了这一系列问题,合约通过程序订立.执行,人工无法干预,所以几乎可 ...

  5. 区块链入门文章二《以太坊:下一代智能合约和去中心化应用平台》

    以太坊:下一代智能合约和去中心化应用平台 以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有 ...

  6. 基于以太坊ICO的安全合约架构

    基于以太坊ICO的安全合约架构 概述 随着比特币.以太坊的崛起,通过ICO来筹集早期资金的项目越来越多.其中,大多数项目都采用基于以太坊的ERC20 token来发放代币.以ERC20 token为标 ...

  7. 3.25 以太坊:实战智能合约众筹1

    这次我们来看看怎么实现以太坊的众筹智能合约案例,首先我们了解一下下面的概念  1.什么是ICO?  ICO是以初始产生的数字加密货币作为投资回报的一种筹措资金的方式,它的概念源自证券界的Initial ...

  8. 比特币开发者:BSC可能会超越以太坊成为顶级智能合约平台

    比特币开发者Udi Wertheimer发推称,我觉得这是以太坊作为顶级智能合约平台的最后一个周期了. 昨天币安智能链(BSC)结算500万ETH,以太坊本身结算700万ETH左右.这可能会很快结束. ...

  9. solidity开发以太坊代币智能合约

    智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...

最新文章

  1. ECCV 2020 | PHOSA:一种基于单目图像的人-物重建方法
  2. 软件Trimmomatic
  3. 前端学习(1896)vue之电商管理系统电商系统之修改用户状态
  4. sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析
  5. 使用.NET Framework的配置文件app.config
  6. 微信小程序怎么在wxml中插入多个图片_闲聊微信小程序开发框架(二)
  7. android编译 预装apk,Android系统使用Shell脚本预装apk
  8. LCN根据官网改造本项目失败案例
  9. matplotlib绘制李萨如图(三) 静态3D李萨如图
  10. jieba分词工具的使用-python代码
  11. 实践系列:分销平台的技术架构
  12. ios 保存图片到相册 崩溃_iOS保存图片到相册
  13. True Launch Bar 4.2 注册码
  14. jmeter汉化仍有英文_【jmeter】Jmeter 修改启动默认语言:将英文版修改为其他语言版本...
  15. Ubuntu 16.04下通过系统软件商店安装flameshot后无法启动问题解决方法
  16. 数据结构(二)——栈及实现、括号匹配
  17. 虚拟机与宿主机之间的网络共享问题
  18. 大数据技术之高频面试题
  19. 炉石传说201909-3 元素选择器201809-3
  20. 微众银行七年,从拓荒者到深耕者

热门文章

  1. Android RecyclerView详解
  2. Color types not allowed (at ‘drawable’ with value ‘#f0f0f0’)
  3. android synchronized的使用
  4. 【Avalon】Avalon笔记(解析Dom模板树,按自己的规范)
  5. Dalvik class加载的处理
  6. Android开发--真机调试出现device offline提示
  7. 创建型模式—原型模式
  8. 课堂练习:返回一个二维数组中最大子数组的和
  9. DAO、Service、Controller及View层级结构梳理
  10. textFiled输入字数的控制问题之—把带输入的拼音也判断了