区块链笔记:关于Solidity的具体示例程序

2024-05-01 06:38

本文主要是介绍区块链笔记:关于Solidity的具体示例程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

智能合约示例

  • 以太坊上的智能合约是可以非常复杂的,可以实现游戏, 投票系统,众筹系统,包括实现电商等

  • 有些只是能实现,但不一定在正式环境中可以使用, 站在技术角度来看下DApp的合约实现,这里我们看下四则运算智能合约示例

  • 首先运行ganache-cli命令启动,看到创建10个地址,并且监听在8545端口

  • 下面是一个算法的智能合约具体示例

    pragma solidity ^0.4.19;contract algorithm {// additionfunction Add(uint a, uint b) public pure returns(uint) {uint r = a + b;return r;}// reducefunction Reduce(uint a, uint b) public pure returns(uint) {uint r = a-b;return r;}// multiplefunction Multiple(uint a, uint b) public pure returns(uint) {uint r = a * b;return r;}// dividefunction Divide(uint a, uint b) public pure returns(uint) {uint r = a/b;return r;}// powfunction Pow(uint a, uint b) public pure returns(uint) {uint r = a ** b;return r;}
    }
    
  • 以上代码仅作为演示, 没有具体做条件判断等鲁棒校验

  • 这样的一份合约中,没有状态变量,数组,仅仅是几个方法而已,对于这一份合约来说没有属性状态,仅仅是工具方法

  • 这份合约从编译到部署会经历什么过程呢?

    • 使用truffle工具创建一个truffle目录 $ truffle init (这个命令是从github上下载一份最简洁的模板代码)
    • 我们可以把上面编写的合约放在contracts目录之下
    • 之后进行编译,使用命令:$ truffle compile 产生字节码,存放于build/contracts之下
      • Compiling ./contracts/algorithm.sol …
      • Writing artifacts to ./build/contracts
    • 然后进入migrations目录,编辑2_deploy_contracts.js文件,没有则创建新的文件
      var Algorithm = artifacts.require("./Algorithm.sol")module.exports = function(deployer) {deployer.deploy(Algorithm);
      };
      

部署调用

  • 上面已经把Algorithm.sol编译成字节码了
  • 执行$ truffle migrate命令部署到ganache(这里是我们的模拟节点)
  • 打开truffle-config.js中networks下面的development配置,如果存在请忽略
    development: {host: "127.0.0.1",     // Localhost (default: none)port: 8545,            // Standard Ethereum port (default: none)network_id: "*",       // Any network (default: none)
    }
    
    • 注意这里同时提前启动ganache,$ ganache-cli 默认端口8545
  • 在项目目录下执行$ truffle console 进入truffle控制台
  • 到truffle的build子目录,打开Algorithm.json文件
  • 从Algorithm.json复制出abi内容段,abi是指应用程序二进制接口,描述了智能合约中方法的类型,返回值等
  • 控制台执行:$ abi=你复制出的abi内容段
  • 从Algorithm.json中找到合约地址也就是Address字段,因为我们要调用合约方法,得知道合约的地址
  • 从控制台执行如下命令:mycalc=web3.eth.contract(abi).at(“0xeE1428686CF00f4fcD7722074f4fa3808feBdbd5”)
    • at里面的参数是Algorithm这份合约的地址
  • 合约方法调用 $ mycalc.Add.call(10,20) 就能返回30
  • 以上是旧版的写法,比较原始,也许新版不再支持,仅当做参考
  • 后续我们使用一些更加方便智能的调用方法,如:SDK, 模板框架直接调用合约

参考

  • https://www.jianshu.com/p/6b10755ff8a4 这里更为详细些
  • http://cw.hubwiz.com/card/c/web3.js-1.0/1/4/1/ 相关API文档

这篇关于区块链笔记:关于Solidity的具体示例程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950959

相关文章

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill