区块链智能合约开发学习

2023-11-07

最近正在肝区块链知识学习,入手学习智能合约的开发,由于网上资料实在是太少了,好不容易东拼西凑完成了智能合约的开发、编译、部署、web3js调用(网页页面)和web3j调用(java调用),赶紧趁热把重点提炼出来。

先上图,是我最近学习知识点的一个概括总结,此外还包含了关键命令和操作步骤。

我智能合约开发的技术选型是Solidity+web3j+Java,工具选型是VSCode+solcjs+web3js+web3j+Ganache

开发智能合约的关键步骤:

    • 开发语言

      • 90.4%用Solidity,7.2%用Vyper其他小众语言可忽略,因此开发智能合约主流选用Solidity,这也是我学习语言
    • 合约开发环境必备

      • nodejs(其他所有前置)
      • vscode
      • vscode的Solidity插件
      • ganache的appx或ganache-cli
        • 提供测试网络,部署合约必要
      • vscode的solcjs插件,用于命令行将.sol编译出.abi和.bin,web3j前一步必要动作,输出后的俩文件使用web3j生成.java
      • web3j工具(.bat执行一次即可,用于生成java可以调用的合约代码)
        • web3j此外还可以创建钱包,执行web3j create 命令按帮助指引
      • truffle(npm安装,用于编译运行智能合约)
      • metamask的chrome浏览器插件,用于浏览器钱包功能,当web客户端“写操作”时需调用有钱钱包
    • 客户端准备

      • web客户端(Vue项目)
        • web3.js脚本引用,用于提供web3访问接口
        • abi.js存放合约abi内容,用于提供合约接口
      • java客户端(SpringBoot或其他后台项目)
        • pom依赖引用:org.web3j,junit
        • XX.java合约java版代码
      • 客户单可以执行的操作
        • 合约的部署或加载已有合约,合约调用,读操作,写操作(写操作与读不同,需要关联有钱的钱包)
    • 开发命令

      • 创建合约
        • VSCODE命令行:在工程空目录当前执行truffle init,即可初始化项目应有文件夹目录
        • VSCODE命令行:truffle create contract hello,创建一个hello.sol的合约文件
      • 编译
        • VSCODE命令行:truffle compile
      • 部署
        • VSCODE命令行:truffle migrate
      • 访问合约
        • 命令行方式:VSCODE命令行:truffle consolelet h=await hello.deployed()h.sayHello()h.addRecord("hh")h.getRecord()
        • java后端方式
          • 在vscode控制台.sol所在目录执行:solcjs --bin --abi hello.sol -o ./
          • 在sol所在目录打开cmd,执行(执行前本目录会有.bin和.abi两个文件)web3j solidity generate --javaTypes hello_sol_hello.bin hello_sol_hello.abi -o ./  -p com.test
          • 将sol同目录的java代码拷贝到java工程中即可进行合约调用
          • 初始化代码:配置好合约地址contract address和钱包秘钥(钱包秘钥用ganache中提供的测试账号小钥匙秘钥串即可用)
        • vue前端方式
          • 引用文件web3.js,abi.js(abi.js内容为合约abi内容是一个json文本段)
          • 添加包web3
    • 环境安装命令

      • truffle
        • npm install -g truffle
      • web3j
        • 运行web3j.bat文件后命令行可跑 web3j XXX命令

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链智能合约开发学习 的相关文章

  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • java 拖放

    我尝试熟悉java中的拖放 但我发现的所有教程都是 让我生气 我想要的只是从 JList 包含在名为 UserPanel 的自制 JPanel 中 拖动 PublicUserLabel 并将其放入从 JTabbedPanel 继承的自制类中
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 当我们使用赋值而不是比较时,如何评估 if/while 条件?

    我在学习 Java 的 OCA OCP 时发现了这个令人惊讶的事情 下面是第一段代码 其中 if 测试条件 部分 让我惊讶 public class BooleanIf public static void main String args
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 使用正则表达式验证电子邮件的最大长度

    我找到了用于电子邮件验证的正则表达式 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4 我希望电子邮件的最大长度为 20 个字符 因此我将其更改为 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4
  • 在 doxygen 中使用 @see 或 @link

    我之前用 Javadoc 记录并使用了标签 see link or see foo and link foo 在我的描述中链接到其他课程 现在我尝试了doxygen 似乎这些标签不兼容 如果我运行 doxygen 完整的标签将被简单地解释为
  • 如何检查单词是否在wordNet中

    我开始了解wordNet直到我知道我找到了synonymous对于一个特定的词 现在我有一个文件 我想使用标记化该文本n gram例如 String s I like to wear tee shirt 使用后n gram这将是 I lik
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • javadoc 子集/java 库组织

    我自己从来没有运行过javadoc 无论是在命令行还是ant 的 javadoc 任务 http ant apache org manual Tasks javadoc html 我将使用 ant 我需要为我编写的库生成 javadoc 问
  • Spring Security 角色层次结构不适用于 Thymeleaf sec:authorize

    我正在使用 Spring Security 3 2 5 RELEASE 和 ThymeLeaf 2 1 4 RELEASE 我已经在安全上下文中定义了角色层次结构 在我的视图层中我正在使用sec authorize属性来定义菜单项 我希望看
  • 在 Eclipse RCP 应用程序中禁用插件贡献

    我经常遇到这个问题 但尚未找到解决方案 每当我编写一个新的基于 Eclipse RCP 的应用程序并包含来自 Eclipse 平台的插件时 我都会 继承 其中一些插件的 UI 贡献 大多数贡献 菜单项 键盘快捷键 属性页 都很有用 但有时我
  • 如何在 JASPIC 中保存经过身份验证的用户?

    我开发了一个安全认证模块 SAM 并实现了validateRequest方法 我还有一个简单的 Web 应用程序配置为使用此 SAM In my validateRequest方法 我检查 clientSubject 并设置一个Caller
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • ebean 映射到 BYTEA 的数据类型是什么?

    我有一个游戏 2 0 2 需要在数据库中存储一些文件的应用程序 我们使用 Ebean 作为 ORM 我相信我的数据库中需要一个 BYTEA 列来存储该文件 但我不确定在我的模型中使用什么数据类型 我应该使用某种Blob 或者只是一个byte
  • junit4 使用特定测试方法创建测试套件

    在 junit4 中 我想执行来自不同类的特定测试方法 即想要使用来自不同类的特定测试方法创建一个测试套件 假设我有两门课 public class Test Login Test public void test Login 001 Sy
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca
  • Graphics2D setfont() 严重减慢了 java 应用程序的启动速度

    我正在用java制作一个游戏 它每秒刷新60次 每次执行循环时 我都会使用 g2d 来绘制图像和字符串 如果我这样做的话一切都会很好g2d setFont new Font Arial Font PLAIN 8 和抽绳 这将是正常的 但如果

随机推荐

  • 计算机网络复习资料

    选择与填空 概述 从通信双方信息交互的方式来看 通信有三种基本的方式 分别是单向通信 双向交替通信 和 双向同时通信 如果收发两端之间的传输距离为 10km 信号在媒体上的传输速率为 2 105km s 数据长度为 1000B 数据发送速率
  • @Param注解的用法

    1 概述 首先明确这个注解是为SQL语句中参数赋值而服务的 Param的作用就是给参数命名 比如在mapper里面某方法A int id 当添加注解后A Param userId int id 也就是说外部想要取出传入的id值 只需要取它的
  • 【思科、华为、华三这三大认证,选哪个考最好?】

    说起考证 大多数网络工程师心里都要抖上一抖 对于没考证的网工来说 一听就头痛 怎么谁都有了 就自己没有 对于考了证的网工来说 一听也头痛 怎么这刚考了一个 其他同事考了三个 今天我主要想和你聊的是 思科 华为 华三这三大认证的前景分析 以及
  • 下面一段代码竟然引起反复打开的时候IE进程挂起

    var lchs close window onunload function if lchs fresh if window screenLeft gt 10000 logout else logout window onbeforeun
  • vscode中如何让结果显示在弹出cmd框中

    1 首先修改配置文件launch json终端的 externalConsole true 这个必须为true 注意 后面不能带逗号 2 执行的时候按F6 按F5的时候还是一样显示在旁边的终端窗口中 但是 按F6就会显示在弹出的cmd窗口中
  • 什么叫工作?

    当时公司招了大批应届本科和研究生毕业的新新人类 平均年龄25岁 那个新的助理 是经过多次面试后 我亲自招回来的一个女孩 名牌大学本科毕业 聪明 性格活泼 私下里我得承认 我招她的一个很重要的原因 除了她在大学里优秀的表现之外 还因为她写了一
  • 文件操作命令

    文章目录 touch 命令 命令格式 常用用法 stat命令 命令格式 常用用法 cat命令 命令格式 常用用法 more命令 命令格式 常用用法 less命令 命令格式 常用用法 head命令 命令格式 常用用法 tail命令 命令格式
  • Python中重写(override)

    Python中重写 override Python中 有重写 override 的概念 但是没有严格意义上的重载 overload 类继承时 子类可以重新定义父类中已有的方法 称为重写 Override 在Python中 没有像其他语言 如
  • 前端高频面试题 Day03

    1 Vue computed 和 watch 区别 对于Computed 它支持缓存 只有依赖的数据发生了变化 才会重新计算 不支持异步 当Computed中有异步操作时 无法监听数据的变化 computed的值会默认走缓存 计算属性是基于
  • (CUDA)快速GPU开发------Device函数应用

    Device函数表示的是仅仅在设备 Device 端能够使用的函数 Device函数可以是任何的函数 这样可以通过每一个线程来运行一个Device函数来达到并行的目的 在本文中聚焦软件开发速度 故而不讨论计算性能问题 目录 适用项目 开发方
  • 震惊,竟然能通过表达式计算VO,再也不用手打Getter计算方法了,程序员福利

    我有一个问题 假设我们从给前端返回一个VO 但是VO中的某些属性需要通过计算得来的 如果我们每次都要在实体类中直接计算的话 不利于代码维护性 每次改变计算方法都要重新修改方法 十分麻烦 所以我就想能不能通过一个数学表达式来计算实体类中的属性
  • H20安装

    首先进入一个你自己文件夹 例如 home h2o 1 官网下载 wget c http h2o release s3 amazonaws com h2o rel weierstrass 7 h2o 3 14 0 7 zip 2 解压 安装z
  • 云鲸扫拖一体机器人说明书_活久见,会自己洗拖布的云鲸扫拖机器人

    一 前言 随着科技的发展 从20世纪最重要的发明解放生产力的洗衣机开始 各种自动设备逐渐走入了人们的家庭 但是与西方国家不同家用吸尘器在国内一直不温不火难以成为每一个家庭的必备 中国人日常的清洁工具依旧是扫帚 拖把 抹布 PS 可能是国人不
  • 新手教程04:Gvim快捷键小结

    前言 零基础初学数字IC 学会什么写什么 与大家一起进步 本文主要总结一些Gvim的快捷键 1 H J K L 左 下 右 上 2 w 跳转到下一个单词 b 跳转到上一个单词 3 y 复制 P 粘贴 yy 复制一行 yj 复制当前行和下一行
  • 盘点适合女生的IT方向!谁说女生不能学IT

    IT行业发展趋势越来越好 很多女生也想转行学习IT 但又担心没有合适自己的专业 潜意识觉得IT都是男生学的 今天就来给大家盘点一下 女生在互联网行业的学习方向 女生学IT超酷 的 1 UI设计 UI设计非常注重细节和美感 女性在视觉美感 色
  • 51单片机入门教程(3.2)——数码管的显示实现(0-9)

    连线图 注意 unsigned char code LedChar 10 0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8 0x80 0x90 编写注意辨别LED灯管 共阳数码管 共阴数码管 include
  • fiddler移动端抓包使用教程(详解)

    目录 导读 前言 抓包 什么是抓包 哪些场景下需要抓包 Fiddler Fiddler抓包原理 安装 Fiddler移动端抓包 第一步 允许远程计算机连接 第二步 设置手机网络代理 第三步 允许捕获HTTPS连接 第四步 手机安装证书 写在
  • 嵌入式软件—RK3568开发环境搭建

    一 RK3568 1 1 开发板特点 BSP比较大 对于电脑内存和存储空间要求高 四核CPU 22nm工艺 1 2 BSP BSP Board Support Package 板级支持包 类似于PC系统中BIOS和驱动程序的集合 BSP包含
  • adworld-crypto-equation-2

    参考 大佬的题解 拿到了一张上半部分被遮掉的RSA的私钥照片 以及一份密文 openssl私钥结构 version pad n pad e pad d pad p pad q pad x1 pad x2 pad x3 其中 pad 表示填充
  • 区块链智能合约开发学习

    最近正在肝区块链知识学习 入手学习智能合约的开发 由于网上资料实在是太少了 好不容易东拼西凑完成了智能合约的开发 编译 部署 web3js调用 网页页面 和web3j调用 java调用 赶紧趁热把重点提炼出来 先上图 是我最近学习知识点的一