5,智能合约(react+区块链实战)

5,智能合约(react+区块链实战)

  • 5-1 智能合约
  • 5-2 metamask安装及私有链搭建互相联动
  • 5-3 solidity数据类型-布尔-数字-地址(owner区别)
  • 5-4 solidity 数组和映射(代币转账)
  • 5-5 solidity结构体与枚举

5-1 智能合约

运行在区块链上的代码()

语言是类js的solidity

Js

尽量找js的语法类比

后期会讲如何部署合约到区块链

这先讲语法

强类型,变量必须声明类型
Constructor 初始化
在这里插入图片描述

左侧js,右侧智能合约

所有合约都有地址概念

可以使用官方remix进行编译看看

虚拟环境
Jsvm本地编译环境

Web3inject,链接远程的以太坊测试链或者私有链

在这里插入图片描述

编译及执行部署
具体可以参考
Metamask开发的不可缺少的插件

部署成功后函数已经可以出来

修改区块链也是需要gas

合约部署后,调用函数是需要支付gas

Complie部署区块链

一个给web3链接调用函数

5-2 metamask安装及私有链搭建互相联动

在remix中jsVM虚拟机瞬间部署调用

在真实开发里面不是连接jsVM虚拟机的,而是真正链接以太坊的链,无论私有链还是说公链,测试链

在部署合约时,要从metamask插件取钱部署

在谷歌装应用需要翻墙,而火狐浏览器可以直接安装
也可以添加插件文件

创建钱包,常用密码,助记词一定不要丢,备份自己的私钥(助记词,私钥映射到其中)

助记词可以通过算法算出秘钥

在这里插入图片描述

下一步安装一个私有链,就是使用
测试在本地搭建一个私有链,本地的以太坊可以随便用ganache

最后怎么部署到测试链,怎么部署到主链

主链花钱还是在私有链执行
其可以快速创建个人区块链,操作还可以显示在区块上

https://www.trufflesuite.com/ganache
下载windows,已经存到百度云盘

在这里插入图片描述

启动后如上
点击快速启动有一大堆东西
在这里插入图片描述

在7545端口给了10个账号,每个账号有100个以太币

上方是需要添加的网络,可以添加本地的网络

在这里插入图片描述

右上角可以添加账号

在这里插入图片描述

可以新增币种
在这里插入图片描述

账户详情有二维码和地址
在这里插入图片描述

打开ganache后无需管就有

在这里插入图片描述

刚打开全新的区块是0,创世区块
在这里插入图片描述

后面就是交易、合约(可以部署一般不会这样做)、事件、日志

需要记住networkid 是5777 ,127.0.0.1是本机

如何使用turffle框架链接本地私有链

现在已经启动7545的服务了

要使用metamask链接此私有链网络

下方添加的是一个火星币的网络

在这里插入图片描述

在这里插入图片描述

添加本地网络在metamask上

点击网络的自定义RPC
视频演示如下

在这里插入图片描述

自己添加的本地链如下

名称local-7545

Rpc-url http://127.0.0.1:7545
Id 1337
ZCH
在这里插入图片描述

复制一下本地的第2个秘钥
在这里插入图片描述

4aed45798c704e884968126ad6740de8631bcb2784e609466bd6260867732c8b
在这里插入图片描述

导入成功后如下,已经有100个币了
在这里插入图片描述

有了此后
在remix中选择 部署的环境 injectweb3
选择地址则是我们的账户地址,不是私钥,可以刷新得到

可以自动监听我们的钱包,本地账号
Gas选择少一些100等

在这里插入图片描述

在这里插入图片描述

可以点击部署,将合约部署到链上,这里还没有写合约

点击后并没有马上部署成功,弹出弹框需要支付gas
视频演示效果如下
在这里插入图片描述

本地演示效果如下
在这里插入图片描述

这里显示余额不足
在这里插入图片描述

是因为账户的原因,链接的是第一个无钱的账号,应该链接第二个导入的账户
如下
在这里插入图片描述

再次部署,如下
在这里插入图片描述

点击确认
在这里插入图片描述

在这里插入图片描述

此时账户余额变为99.99999

花费手续费部署了合约

Gas limit不用管即可

此次进入到下方
在这里插入图片描述

但我们修改内容就会弹出消耗gas的窗口

在这里插入图片描述
在这里插入图片描述

只要对合约中的数据进行了修改都需要支付手续费,只读的不需要支付gas

后面的领养宠物修改值的时候都会有弹窗

这里没有转账只有部署消耗gas

若是转账就是手续费加转账的钱

5-3 solidity数据类型-布尔-数字-地址(owner区别)

1,布尔值

True false
&& || !

2.整型
Unit 无符号整型,只能表示正数
Init 任何范围书都可表示

+ - * /
<> <=

3.地址(其余语言无,此语言特有)
以太坊的交互就是地址与地址的交互

0x31ebbf3038a2A75259B86A53371b8C785F9647EB

一个42个,去掉前面0X则40位的地址

定义一个adress
(1)合约里的全局变量 msg.sender 部署合约的地址(合约的拥有者)
(2)地址有很多方法,blance查看余额 transfer 转账

在remix复制代码如下

pragma solidity ^0.4.24;//contract 关键词新建合约
contract Counter{//变量必须声明类型uint num;address owner;//初始化constructor(){num = 0;//msg.sender 谁部署合约,这个值就是谁owner = msg.sender;}//函数类型 public 公用函数(在执行此函数时,谁执行合约此msg.sender就是谁)function increment() public{//只有最初的部署合约的人才能数字加一(要注意区分部署合约人的地址和执行合约人的地址的不同)if (owner == msg.sender){num +=1;}}//view函数 只读取变量,不写//声明返回值类型function getNum() view returns (uint){return num;}
}

通过上述进行部署合约到链上及,区分部署合约的地址和调用合约的地址的不同

在这里插入图片描述

谁最早部署,constructor执行的是谁谁就就是owner
有些操作只有owner操作,若后期的发币以及课程上架下架都是创造者可以进行的操作

下方是另一个程序操作
在这里插入图片描述

其余地址执行写入的函数时,虽然没法真正的写入进去,但还是会消耗gas

5-4 solidity 数组和映射(代币转账)

4,字符串

“woniu”

定义很简单

String即可

5,数组
如宠物领养要存储所有的

Uint [5] arr = “woniu”;uint [5] arr = [1,2,3,4,5];arr[1] = 3;arr.push(6);for(unit i=0;i=arr.length;i++){}

6,map
所谓的map和js的对象是一个东西

{
Name:’woniu’,
Age:18
}//结构体(实现数字货币使用此做)mapping(address =>uint) users;users["address1"] = 100;users["address2"] = 100;//所谓代币的转账就是映射里自己存储的值users["address1"] -= 10;
users["address2"] += 10;
pragma solidity ^0.4.24;//contract 关键词新建合约
contract Counter{//变量必须声明类型uint num;address owner;string name = "woniu";uint [5] arr = [1,2,3,4,5];arr[1] = 3;arr.push(6);for(unit i=0;i=arr.length;i++){}//结构体(实现数字货币使用此做)mapping(address =>uint) users;users["address1"] = 100;users["address2"] = 100;//所谓代币的转账就是映射里自己存储的值users["address1"] -= 10;users["address2"] += 10;//初始化constructor(){num = 0;//msg.sender 谁部署合约,这个值就是谁owner = msg.sender;}//函数类型 public 公用函数(在执行此函数时,谁执行合约此msg.sender就是谁)function increment() public{//只有最初的部署合约的人才能数字加一(要注意区分部署合约人的地址和执行合约人的地址的不同)if (owner == msg.sender){num +=1;}}//view函数 只读取变量,不写//声明返回值类型function getNum() view returns (uint){return num;}
}

5-5 solidity结构体与枚举

6,结构体
结构体和map比较类似

struct Student{uint age;uint id;string name;string phone;}//定义一个结构体(结构体中四个字段必须满足)woniu = Student(18,0,'woniu','13811111111')//数组中每个元素都可以是结构体

7,枚举
变量只能在此中选

 //0,1(枚举里面的元素就是对应数字)enum sex {male,female}//male =0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/45021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频怎么压缩变小?最佳视频压缩器

即使在云存储和廉价硬盘空间时代&#xff0c;大视频文件使用起来仍然不方便。无论是存储、发送到电子邮件帐户还是刻录到 DVD&#xff0c;拥有最好的免费压缩软件可以确保您快速缩小文件大小&#xff0c;而不必担心视频质量下降。继续阅读以探索一些顶级最佳 免费视频压缩器选项…

排序(二)——快速排序(QuickSort)

欢迎来到繁星的CSDN&#xff0c;本期内容包括快速排序(QuickSort)的递归版本和非递归版本以及优化。 一、快速排序的来历 快速排序又称Hoare排序&#xff0c;由霍尔 (Sir Charles Antony Richard Hoare) &#xff0c;一位英国计算机科学家发明。霍尔本人是在发现冒泡排序不够快…

oracle 23ai新的后台进程bgnn介绍

前言 昨天发文研究了哪些oracle 后台不能杀 具体文章如下链接 oracle哪些后台进程不能杀&#xff1f;-CSDN博客 其中23ai中新增了一个后台进程bgnn 但是在oracle 23ai database reference中并没有找到该后台进程 有点不甘心就开了个SR&#xff0c;找oracle 官方来看看这个后…

构建工具webpackvite

1. webpack 使用步骤: 1.初始化项目yarn init -y&#xff08;也可以是npm其他包管理工具&#xff09; 2.安装依赖webpack webpack-cli&#xff1a;yarn add -D webpack webpack-cli&#xff08;-D是只用于开发时候加&#xff09; 3.在项目中创建src目录&#xff0c;然后编写代…

开发编码规范笔记

前言 &#xff08;1&#xff09;该博客仅用于个人笔记 格式转换 &#xff08;1&#xff09;查看是 LF 行尾还是CRLF 行尾。 # 单个文件&#xff0c;\n 表示 LF 行尾。\r\n 表示 CRLF 行尾。 hexdump -c <yourfile> # 单个文件&#xff0c;$ 表示 LF 行尾。^M$ 表示 CRLF …

element-ui操作表格行内容如何获取当前行索引?

需求&#xff1a; 根据每个用户的提交次数、撤回次数&#xff0c;动态计算出实际次数&#xff0c;并且提交次数不能小于撤回次数 <template><div><el-table:data"tableData"style"width: 80%"border><el-table-columnprop"date&…

怎么提高音频的播放速度?可以提高音频播放速度的四种方法推荐

怎么提高音频的播放速度&#xff1f;提高音频的播放速度是一种有效的策略&#xff0c;可以显著节省时间和提升信息获取的效率。随着信息量不断增加和学习需求的多样化&#xff0c;快速播放音频已成为许多人在日常生活和工作中的常见做法。这种方法不仅可以用于提高学习效率&…

C语言 指针和数组——指针数组的应用:命令行参数

目录 命令行参数 演示命令行参数与main函数形参间的关系 命令行参数  什么是 命令行参数&#xff08; Command Line Arguments &#xff09;&#xff1f;  GUI 界面之前&#xff0c;计算机的操作界面都是字符式的命令行界面 &#xff08; DOS 、 UNIX 、 Linux &…

曹操的五色棋布阵 - 工厂方法模式

定场诗 “兵无常势&#xff0c;水无常形&#xff0c;能因敌变化而取胜者&#xff0c;谓之神。” 在三国的战场上&#xff0c;兵法如棋&#xff0c;布阵如画。曹操的五色棋布阵&#xff0c;不正是今日软件设计中工厂方法模式的绝妙写照吗&#xff1f;让我们从这个神奇的布阵之…

C++ 【 PCL 】点云添加随机均匀噪声及源代码

PCL向点云添加均匀随机噪声&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/random.h>int main() {// 加载点云文件pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::Poi…

服务器数据恢复—同品牌不同系列服务器raid5阵列数据恢复方案分析

RAID5磁盘阵列数据恢复案例一&#xff1a; 服务器数据恢复环境&#xff1a; 一台某品牌LH6000系列服务器&#xff0c;通过NetRaid阵列卡将4块硬盘组建为一组RAID5磁盘阵列。操作系统都为Window server&#xff0c;数据库是SQLServer。 服务器故障&#xff1a; LH6000系列服务器…

Python实现傅里叶级数可视化工具

Python实现傅里叶级数可视化工具 flyfish 有matlab实现&#xff0c;我没matlab&#xff0c;我有Python&#xff0c;所以我用Python实现。 整个工具的实现代码放在最后,界面使用PyQt5开发 起源 傅里叶级数&#xff08;Fourier Series&#xff09;由法国数学家和物理学家让-巴…

python3读取shp数据

目录 1 介绍 1 介绍 需要tmp.shp文件和tmp.dbf文件&#xff0c;需要安装geopandas第三方库&#xff0c;python3代码如下&#xff0c; import geopandas as gpdshp_file_path "tmp.shp" shp_data gpd.read_file(shp_file_path) for index, row in shp_data.iterro…

异步任务中传递用户信息的一种优雅写法

目录 前言基础写法测试示例 升级写法测试示例 前言 在异步任务中&#xff0c;我们通常会遇到子任务获取当前用户的场景。我们可能会采取ThreadLocal来存储主线程传递的用户信息。然后在业务开始时set&#xff0c;业务结束时remove&#xff0c;来保证不会出现OOM的场景。 基础…

数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比

开源生态 众所周知&#xff0c;MySQL主备库&#xff08;两节点&#xff09;一般通过异步复制、半同步复制&#xff08;Semi-Sync&#xff09;来实现数据高可用&#xff0c;但主备架构在机房网络故障、主机hang住等异常场景下&#xff0c;HA切换后大概率就会出现数据不一致的问…

Vue打包文件dist放在SpringBoot项目下运行(正确实现全过程)(下)

在上一篇中&#xff0c;实现了Vue打包文件dist放在SpringBoot项目下运行。 Vue打包文件dist放在SpringBoot项目下运行&#xff08;正确实现全过程&#xff09;&#xff08;上&#xff09; 问题 路由刷新会产生404的问题。 原因 vue开发的应用&#xff0c;采用的是SPA单页…

【Linux网络】网络基础

本篇博客整理了 Linux 网络编程的前置知识&#xff0c;例如网络的发展、协议和协议栈分层、网络通信原理、网络地址等&#xff0c;为后续进入 Linux 网络编程作铺垫。 目录 一、网络发展 二、网络协议 1&#xff09;协议的作用 2&#xff09;协议栈 3&#xff09;协议分层…

大吉大利杯_RE

A-Maze-In 一道比较新颖的 maze 题吧&#xff0c; 地图长度是 256 32 * 8 &#xff1f; 不知道了 0.0 难崩&#xff0c;看了一下 wp 说map长度什么的都有&#xff0c;应该就是 16 * 16的 看了一圈&#xff0c;感觉还是要把 DFS&#xff0c;BFS 算法学一下&#xff0c;直接跑…

中国内陆水体氮沉降数据集(1990s-2010s)

全球大气氮沉降急剧增加对内陆水生态系统产生不良影响。中国是全球三大氮沉降热点地区之一&#xff0c;为了充分了解氮沉降对中国内陆水体的影响&#xff0c;制定合理的水污染治理方案&#xff0c;我们需要清楚的量化内陆水体的氮沉降通量。为此&#xff0c;我们利用LMDZ-OR-IN…

Lambda表达式与函数式工具应用详解

在现代编程中&#xff0c;Lambda表达式和函数式工具是处理数据、实现简洁代码的重要工具。尤其是在函数式编程范式中&#xff0c;它们发挥着至关重要的作用。本文将从定义、语法、应用场景到具体案例&#xff0c;详细阐述Lambda表达式和函数式工具在Python和Java等编程语言中的…