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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI虚拟医生重塑医患关系

如今&#xff0c;越来越多的企业开始选择用AI虚拟数字人播报员替代真人出镜&#xff0c;这不仅有助于企业实现降本增效的目标&#xff0c;更能让广告传播趋向多样化和个性化。对于普通人而言&#xff0c;也摆脱了真人出镜的种种烦恼&#xff0c;让表达更加自由与便捷。AI虚拟数…

视频太大怎么压缩变小?这几种压缩方法值得收藏!

视频太大怎么压缩变小&#xff1f;在数字化浪潮汹涌的时代&#xff0c;处理大型视频文件已不再仅仅是存储空间的挑战&#xff0c;我们身处于数据洪流之中&#xff0c;数据的安全与隐私的保护已然成为了我们不得不面对的重大议题&#xff0c;特别是随着视频内容的井喷式增长及其…

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

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

医院人员管理系统03_下午:C3P0连接池,完成简单的增删改查

文章目录 什么是C3P0项目目录Students.javaC3P0Conn.javaStuDao.java套路代码 什么是C3P0 C3P0连接池要比jdbc更简单&#xff0c;dao层写方法就能看出来 项目目录 Students.java 没有变&#xff0c;直接是jdbc的实体类 跳转我的上一篇文章查看实体类代码 C3P0Conn.java 这…

Elasticsearch:Node.js ECS 日志记录 - Winston

这是继上一篇文章 “Elasticsearch&#xff1a;Node.js ECS 日志记录 - Pino” 的续篇。我们继续上一篇文章来讲述使用 Winston 包来针对 Node.js 应用生成 ECS 向匹配的日子。此 Node.js 软件包为 winston 记录器提供了格式化程序&#xff0c;与 Elastic Common Schema (ECS) …

一键掌握天气动态 - 基于Vue和高德API的实时天气查询

前言 本文将学习如何使用Vue.js快速搭建天气预报界面,了解如何调用高德地图API获取所需的天气数据,并掌握如何将两者有机结合,实现一个功能丰富、体验出色的天气预报应用 无论您是前端新手还是有一定经验,相信这篇教程都能为您带来收获。让我们一起开始这段精彩的Vue.js 高德…

音视频开发—FFmpeg 从MP4文件中抽取视频H264数据

文章目录 MP4文件存放H264数据方式MP4 文件结构概述H.264 数据在 MP4 中的存储1. ftyp 盒子2. moov 盒子3. mdat 盒子 H.264 数据在 stsd 盒子中的存储&#xff08;AVC1&#xff09;AVC1与Annex-B 格式&#xff08;裸 H.264 流&#xff09;的区别 从MP4文件中提取H264裸流步骤&…

zynq启动和程序固化流程

普通FPGA启动 FPGA的启动方式主要包含主动模式、被动模式和JTAG模式。 主动模式&#xff08;AS模式&#xff09; 当FPGA器件上电时&#xff0c;它作为控制器从配置器件EPCS中主动发出读取数据信号&#xff0c;并将EPCS的数据读入到自身中&#xff0c;实现对FPGA的编程。这种…

石油巨头受冲击!埃克森美孚、BP接连发出盈利预警

KlipC报道&#xff1a;近日&#xff0c;BP&#xff08;英国石油&#xff09;预计其第二季度将面临10亿至20亿美元的减值费用&#xff0c;并发出警告称其炼油利润率“大幅下降”&#xff0c;石油交易收益预计出现疲软。消息公布后&#xff0c;其股价下跌超4%。 由于中间馏分油利…

【三维重建】【深度学习】windows11下3DGS代码Pytorch实现

【三维重建】【深度学习】windows11下3DGS代码Pytorch实现 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】windows11下3DGS代码Pytorch实现前言3DGS模型运行安装CUDA安装 Visual Studio C编…

PlugLink的技术架构实例解析(附源码)

在探讨PlugLink这一开源应用的实际应用与技术细节时&#xff0c;我们可以从其构建的几个核心方面入手&#xff0c;结合当前AI编程的发展趋势&#xff0c;为您提供既有实例又有深度解析的内容。 PlugLink的技术架构实例解析 前端技术选型 —— layui框架&#xff1a; PlugLi…

最新 Kubernetes 集群部署 + Contranerd容器运行时 + flannel 网络插件(保姆级教程,最新 K8S 1.28.2 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

Cadence23 中 Capture 与 PCB Editor 的交互

1.Capture选中器件在PCB Editor 中高亮显示 1.点击N的图标选项卡&#xff0c;导出第一网表 2,导入第一网表&#xff1a; 点击移动命令&#xff0c;在查找选项卡中选择Symbol器件选项卡&#xff1a; 点击器件即可高亮&#xff1a; 2.PCB Editor选中器件在 Capture中高亮显示 …

libcoap3对接华为云平台

文章目录 前言一、平台注册二、引入源码库1.libcoap仓库编译2.分析网络报文3.案例代码4.编译&运行 总结 前言 通过libcoap3开源代码库对接华为云平台&#xff0c;本文章将讨论加密与不加密的方式对接华为云平台。 一、平台注册 首先&#xff0c;你需要在华为云平台上创建…

Matlab提取excel数据及处理的实操举例

实现目的 当excel数据量庞大的时候&#xff0c;如果采用人工处理数据的方法就会成为非常出力不讨好的事&#xff0c;既容易出错&#xff0c;又容易抑郁。 利用matlab处理成为既简单又高效的方式。 例如&#xff0c;以GD32F7xx系列的管脚复用表格为例&#xff0c;在169x19的e…

昇思MindSpore学习笔记6-06计算机视觉--Vision Transormer图像分类

摘要&#xff1a; 记录MindSpore AI框架使用ViT模型在ImageNet图像数据分类上进行训练、验证、推理的过程和方法。包括环境准备、下载数据集、数据集加载、模型解析与构建、模型训练与推理等。 一、概念 1. ViT模型 Vision Transformer 自注意结构模型 Self-Attention Tran…

ubuntu部署minio集群

minio集群介绍 官方文档&#xff1a;https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html 本方案采用在多节点多驱动器 (MNMD) 或“分布式”配置部署 MinIO。 MNMD 部署提供企业级性能、可用​​性和可扩展性&#…

力扣 203反转链表

思路 用cur->next指向pre,把链表倒转 cur后移&#xff0c;cur指向原链表的下一个 注意用tmp存储原链表中cur的后一个 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *cur head; ListNode *pre nullptr; ListNode *tmp; while (cur ! nul…

书生·浦语2.5开源,推理能力再创新标杆

2024 年 7 月 3 日&#xff0c;上海人工智能实验室与商汤科技联合香港中文大学和复旦大学正式发布新一代大语言模型书⽣浦语2.5&#xff08;InternLM2.5&#xff09;。相比上一代模型&#xff0c;InternLM2.5 有三项突出亮点&#xff1a; 推理能力大幅提升&#xff0c;领先于国…

【代码随想录】【算法训练营】【第59天】 [卡码110]字符串接龙 [卡码105]有向图的完全可达性 [卡码106]岛屿的周长

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 59&#xff0c;周五&#xff0c;继续ding~ 题目详情 [卡码110] 字符串接龙 题目描述 卡码110 字符串接龙 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 […