区块链笔记:关于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实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu