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

news2024/9/20 1:22:08

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.coloradmin.cn/o/1918946.html

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

相关文章

强制升级最新系统,微软全面淘汰Win10和部分11用户

说出来可能不信&#xff0c;距离 Windows 11 正式发布已过去整整三年时间&#xff0c;按理说现在怎么也得人均 Win 11 水平了吧&#xff1f; 然而事实却是&#xff0c;三年时间过去 Win 11 占有率仅仅突破到 29%&#xff0c;也就跳起来摸 Win 10 屁股的程度。 2024 年 6 月 Wi…

【测试文档】系统测试报告(Word原件2024)

软件测试报告在软件开发过程中起着至关重要的作用&#xff0c;主要有以下几个主要原因&#xff1a; 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…

【redis缓存】怎么使用 Redis 实现一个延时队列?

redis实现延时队列 1 回答2 代码实现2.1 利用 Redis 过期消息实现延时队列2.1.1 配置键空间通知2.1.2 应用程序订阅过期事件 2.2 使用 Sorted Set 实现延时队列2.2.1 实现思路2.2.2 详细步骤 2.3 Redisson 实现延迟队列2.3.1 添加Redisson依赖2.3.2 任务生产者类 TaskProducer2…

一文入门【NestJs】Providers

Nest学习系列 ✈️一文入门【NestJS】 ✈️一文入门【NestJs】Controllers 控制器 &#x1f6a9; 前言 在NestJS的世界里&#xff0c;理解“Providers”是构建健壮、可维护的后端服务的关键。NestJS&#xff0c;作为Node.js的一个现代框架&#xff0c;采用了Angular的一些核…

轻松搭建系统,让每个故事都精彩绽放!

"轻松搭建系统&#xff0c;让每个故事都精彩绽放&#xff01;" 这句话传递了一个核心理念&#xff0c;即通过简化、高效的系统搭建过程&#xff0c;让每一个创意故事都能以最佳状态呈现给观众&#xff0c;实现其独特魅力和价值的最大化。 1、模块化设计&#xff1a;系…

Docker初识及使用研究

公司使用docker&#xff0c;小组成员人人都是默默使用&#xff0c;也没讲解培训&#xff0c;真是搞笑。 目录 1. Docker安装 1. Docker安装 需要使用梯子访问docker官网&#xff1a;Install Docker Engine on Ubuntu 此处有个疑惑&#xff1a;Docker Engine 与Docker、Docker…

排序(一)——冒泡排序、直接插入排序、希尔排序(BubbleSOrt,InsertSort,ShellSort)

欢迎来到繁星的CSDN&#xff0c;本期的内容主要包括冒泡排序(BubbleSort&#xff09;&#xff0c;直接插入排序(InsertSort)&#xff0c;以及插入排序进阶版希尔排序&#xff08;ShellSort&#xff09;。 废话不多说&#xff0c;直接上正题&#xff01; 一、冒泡排序 冒泡排序…

国漫推荐04

童年经典 1.《喜羊羊与灰太狼》 2.《虹猫蓝兔七侠传》 3.《虹猫蓝兔走天涯》 4.《虹猫蓝兔光明剑》 5.《蓝猫龙骑团》 6.《爆丸小子》 7.《超智能足球》 8.《摩尔庄园》 9.《赛尔号》 10.《恐龙宝贝》 11.《天上掉下个猪八戒》 12.《天眼》

tk 设置文本颜色

import tkinter as tk from tkinter import messageboxdef change_text_color(color):# 获取选中的文本范围start_index text_widget.tag_ranges(tk.SEL)if start_index:# 如果文本被选中&#xff0c;只改变选中文本的颜色tag_name f"color_{color}"# 移除选中文本…

Internet Download Manager V6.43被用15天 怎么激活IDM

互联网下载管理器是一个广泛使用的软件&#xff0c;它可以帮助用户更好地管理和加速他们的下载。最新版本Internet Download Managerv6.43已经发布&#xff0c;它带来了一系列新功能和改进&#xff0c;让用户更加方便和快速地下载他们需要的文件。 新版本Internet Download Ma…

通过手机供网、可修改WIFI_MAC的网络设备

一、修改WIFI mac&#xff08;bssid&#xff09; 取一根网线&#xff0c;一头连着设备黄色网口、一头连着电脑按住设备reset按键&#xff0c;插入电源线&#xff0c;观察到蓝灯闪烁后再松开reset按键 打开电脑浏览器&#xff0c;进入192.168.1.1&#xff0c;选择“MAC 地址修改…

书生大模型实战营-入门第2关-python单词计数

python单词计数 统计单词数量 统计单词数量 统计单词数量&#xff0c;拆分为以下几步&#xff1a; 需要剔除文本中的标点符号与换行符大小写转换单词拆分计数 详细代码如下&#xff1a; import redef wordcount(text):"""单词计数标点去除大小写转换"&…

Java版Flink使用指南——背压

大纲 新建工程模拟函数自定义无界流背压测试引入数据低压侧高压侧测试结果 优化降低算法复杂度提高并行度 工程代码 背压&#xff08;Backpressure&#xff09;又称“反压”&#xff0c;是指在Flink的处理过程中&#xff0c;某个过程出于某种原因&#xff0c;消耗的上游数据过慢…

分析逆向案例十三——拍拍贷登录密码逆向和JS原型链

网址&#xff1a;拍拍贷 登陆页面&#xff0c;找登陆包&#xff0c;密码和用户名都进行了加密。 直接参数搜索 &#xff0c;一眼下面的第二条&#xff0c;直接点击进入 加密位置打上断点分析&#xff0c;一个加密嵌套另一个加密。 中间的e.md5好像是md5加密&#xff0c;打印一…

windows系统上python3安装open3d第三方库

打开命令提示符&#xff0c;输入&#xff0c; pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple成功页面&#xff0c;

百度安全大模型智能体实践入选信通院“安全守卫者计划”优秀案例

7月3日&#xff0c;由全球数字经济大会组委会主办&#xff0c;中国信息通信研究院&#xff08;以下简称中国信通院&#xff09;与中国通信标准化协会联合承办的2024全球数字经济大会“云和软件安全论坛暨第二届SecGo云和软件安全大会”在北京召开。本届论坛聚焦云和软件安全最新…

【Stable Diffusion】(基础篇三)—— 图生图基础

图生图基础 本系列笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 本文主要讲解如何使用S…

线性系统理论及应用GUI设计及仿真

目录 1.控制系统的状态空间模型 1.1.状态空间模型 1.2 传递函数模型 1.3 传递函数转换为状态空间模型 1.4.状态空间模型转换为传递函数 1.5.状态空间模型转化为约当标准型 2.线性系统的时域分析 2.1.矩阵指数函数的计算 2.2.线型定常连续系统的状态空间模型求解 3.线…

java后端项目启动失败,解决端口被占用问题

报错信息&#xff1a; Web server failed to start . Port 8020 was already in use. 1、查看端口号 netstat -ano | findstr 端口号 2、终止进程 taskkill /F /PID 进程ID 举例&#xff1a;关闭8020端口

Echarts 实现空心圆的绘制

文章目录 需求分析在指定位置绘制需求 如图所示,绘制空心圆 分析 <!DOCTYPE html> <html><head><meta charset=