区块链之智能合约入门

第一步 安装环境

首先这里写的合约是指solidity合约,使用Remix IDE。所以我们第一步就是安装Remix IDE。remix ide是开发以太坊智能合约的神器,支持网页在线编写、部署和测试智能合约。网址http://remix.ethereum.org
可以选择先跳过安装环境这一步,直接使用在线的http://remix.ethereum.org

我这边的测试环境是kali-linux
安装的指令为

git clone https://github.com/ethereum/remix-ide.git
cd remix-ide
sudo npm install
npm run build && npm run serve

注意:一定要sudo npm install,一定要sudo npm install,一定要sudo npm install,重要的事情说三遍,本人在这里踩了一次坑了
一般kali是不会自带npm这个东西的,所以我们需要先安装npm
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题

Linux安装NPM指令(如果是非Linux建议查看Node.js的菜鸟教程,链接为 https://www.runoob.com/nodejs/nodejs-install-setup.html)

wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz    // 下载
tar xf  node-v10.9.0-linux-x64.tar.xz       // 解压
cd node-v10.9.0-linux-x64/                  // 进入解压目录
./bin/node -v                               // 执行node命令 查看版本

解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:

ln -s /root/node-v10.9.0-linux-x64/bin/npm   /usr/local/bin/
ln -s /root/node-v10.9.0-linux-x64/bin/node   /usr/local/bin/
ln -s /root/node-v10.9.0-linux-x64/bin/npx   /usr/local/bin/

这边前一个路径是你node.js下载到本地的路径

这样表示成功建立软连接,可以使用npm了。
当然,不建立软连接也可以直接使用,只要进入到npm所在的目录下即可

然后开始执行我们一开始的安装Remix IDE的命令
这边如果运行报错可能是因为在执行到npm run build的时候提示错误,没有找到模块fast-async模块,一般不会,如果前面你是sudo install的话,因为没有加sudo的话会出现下面的错误

npm ERR! Error: EACCES: permission denied, access

如果出现cannot find module ‘xxx’,说明你缺xxx模块,你需要做的就是输入命令sudo npm install xxx.之后将会自动下载安装,如果提示不成功,再来一遍

接下来如果一切正常的话就可以npm run build

npm run serve

然后访问即可

环境部署成功

第二步 编写第一个HelloWorld

Solidity是以太坊智能合约编程语言,所以在这之前需要对Solidity一些基本的语法进行一些了解,我是通过http://www.tryblockchain.org/这个网站进行初步简单的学习的

这边在网上找了个log函数,方便等会看是否成功调用

pragma solidity ^0.5.11;//通过log函数重载,对不同类型的变量trigger不同的event,实现solidity打印效果,使用方法为:log(string name, var value)contract Console {event LogUint(string, uint);function log(string memory s , uint x) internal {emit LogUint(s, x);}event LogInt(string, int);function log(string memory s , int x) internal {emit LogInt(s, x);}event LogBytes(string, bytes);function log(string memory s , bytes memory x) internal {emit LogBytes(s, x);}event LogBytes32(string, bytes32);function log(string memory s , bytes32 x) internal {emit LogBytes32(s, x);}event LogAddress(string, address);function log(string memory s , address  x) internal {emit LogAddress(s, x);}event LogBool(string, bool);function log(string memory s , bool x) internal {emit LogBool(s, x);}
}
pragma solidity ^0.5.11;
import "browser/Console.sol";contract HelloWorld is Console{function getFlag(uint amount) public returns (string memory){bytes memory flag="flag{asf54654v98x7v}";if(amount>100){log("give you flag!",flag);}uint state=0;log("no flag!",state);}
}

这边就是通过读取参数输入的新值,如果amout大于100,那么就打印出flag
项目结构

编译合约时有些蒙,后来发现应该用火狐浏览器,安装MetaMask,可以在火狐浏览器的插件中直接搜索安装,如果不行的话可以自行百度一下另外的安装方法。

在这边添加这个模块

选择Environment为Injected Web3,然后Remix IDE会请求连接到你的MetaMask钱包里的账号

然后添加Solidity compiler模块

对我们的HelloWorld进行编译

编译成功后这边会有绿色箭头,如果编译失败可以看编译详细,查看错误原因

然后回到这边就可以看到这边出现了我们编译好的HellloWorld。

如果之前没有部署过这个合约就点击下方橙色框Deploy,此时会跳出支付gas的弹窗,点击确定即可

等待几秒合约就会部署完成,最下方就会显示已部署的合约(及其地址);如果之前部署过相同合约,那么可以将合约地址复制到At Address并点击蓝色按钮加载合约,效果相同。

这边这个橙色getFlag就是合约里的函数,输入一个金额,并点击橙色按钮就可以调用此函数了只要大于100就会打印flag,通过ropsten.etherscan.io可以查到此合约的交易和事件。

输入101,点击getFlag,然后确认即可

这边会自动转成16进制打印出来。

第三步 加载已部署合约

首先我们部署好的合约地址是可以在这边看到

如果是我们自己要加载我们自己的合约的话,可以直接通过第二步说的At Address加载

点击At Address即可
以上都是在remix下测试的,如果我们要加载他人的合约就需要在geth下测试

第四步 和已知合约地址交互

这边首先获得一个我们部署好的合约地址,记录下来

在这边声明函数原型

编译完成后这边会出现我们编译好的test.sol

在At Address中填入我们之前记录下来的合约地址,点击蓝色的At Address

这边就已经实现交互了

这边可以看到我们成功和合约进行了交易,点进去查看具体事件

发现成功打印了flag,证明我们成功调用了合约中的getFlag函数实现了和合约的交互

区块链之智能合约入门相关推荐

  1. 区块链智能合约入门:Hello world(2)

    这次的基础合约Hello world 有所升级,增加了updateMessage,让你可以随时更新自己想说的话. 其实在区块链智能合约入门:Hello world(1)这篇文章里已经介绍过,Hello ...

  2. BC之SC:区块链之智能合约——与传统合约的比较以及智能合约模型部署原理、运行原理相关配图

    BC之SC:区块链之智能合约--与传统合约的比较以及智能合约模型部署原理.运行原理相关配图 目录 SC与传统合约的比较 SC模型部署原理.运行原理 SC与传统合约的比较 1.传统合约VS智能合约  特 ...

  3. 区块链之智能合约详解

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 什么是智能合约? 智能合约又称智能合同,是由事件驱动的.具有状态的.获得多方承认的.运行在区块链之上的.且能够根据预设条 ...

  4. 区块链——智能合约入门知识

    文章目录 1.区块链安全体系架构 分法1 分法2(类似分法1) 分法3 2.变量 2-1.变量 变量的声明: 变量的分类: 2-2.类型 值类型: 引用类型: 3.语句 4.函数 5.ERC20标准 ...

  5. 分享实录|区块链技术与智能合约入门(开发实例)

    2019独角兽企业重金招聘Python工程师标准>>> 1 什么是区块链 1.1白话讲解区块链 现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链? 前几天和 ...

  6. 智能合约重构社会契约(11)天德区块链智能合约系统

    智能合约是可以运行在区块链上的合约代码,是一种运行在区块链之上的电子协议,它允许在没有第三方的情况下进行可信执行. 1. 设计原则 智能合约数据来源于链上. 智能合约的输人是从区块链的数据库里出来的. ...

  7. [区块链安全-Ethernaut]区块链智能合约安全实战-已完结

    [区块链安全-Ethernaut]区块链智能合约安全实战-已完结 准备 0. Hello Ethernaut 准备工作 创建实例并分析 合约交互 总结 1. Fallback 创建实例并分析 合约交互 ...

  8. Solidity 智能合约入门

    Solidity 智能合约入门 存储合约示例 将一个数据放置在链上 // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.16 &l ...

  9. BSV 智能合约入门(4)- sCrypt 合约实战篇 - P2PKH 合约化

    上一篇文章主要介绍了 sCrypt 语言开发利器 sCrypt Visual Studio Code 插件 的相关功能.现在我们就要实操起来,体验一下 sCrypt 合约完整的设计.开发.测试.部署. ...

最新文章

  1. Swagger-概述
  2. 1.4 isAlive()方法
  3. LeetCode 第 20 场双周赛(294 / 1541,前19.07%,第1次全部通过)
  4. oracle11管理员连接数据库,1.运行 cmd.exe;2.输入 sqlplus / as sysdba,以系统管理员(sysdba)身份连接数据库,进行数据库管理操作。3.连接成功后执...
  5. mysql负责均衡读写分离_MySQL读写分离之负载均衡
  6. 心脏遥测监控系统服务器,基于ARM7的心电采集与远程传输系统设计
  7. c语言继承与派生作用,C++中继承与派生是如何实现的?
  8. Python中的第三方模块(微信为例)
  9. java 字符串池_什么是Java字符串池?
  10. 用CSS Houdini画一片星空
  11. 电路板上的这些标志你都知道是什么含义吗?——详解电子产品认证类型
  12. Cisco WebEx设备ssl证书安装指南
  13. Android统计图表MPAndroidChart
  14. 服务器主板硬盘接口数量,主板上的硬盘插槽最多有几个?
  15. wps html转换成pdf文件,wps怎么转换成pdf
  16. 【 unity3d 】Transform.LookAt()方法
  17. java mocked_java – 使mocked方法返回传递给它的参数
  18. 合数python_python输出100以内的质数与合数
  19. python与会计学_Python 中用于表示逻辑与的关键字分别是 ____
  20. 【架构师实践课】微服务如何拆分?大型微服务项目从何下手?

热门文章

  1. python练手程序_100个python练手小程序
  2. 【Python金融量化 5- 100 】、五、蒙特卡洛和毛利
  3. ES 6 +ES 5 的相关学习笔记
  4. 机器学习一定要很优秀才能做嘛?其实我们都可以。
  5. ​EMNLP 2021 | 以对比损失为微调目标,UMass提出更强大的短语表示模型
  6. ACM Computing Surveys 2021:基于会话推荐系统的最新长文综述
  7. 我跑了ERNIE和BERT两个模型,结果出乎意料......
  8. 我是一名普通程序员,通过自己的努力,我的收入涨了3倍!
  9. 学好机器学习,这里有想要的一切
  10. 丑憨批的html笔记