什么是Dapp?带你从零开始搭建一个Dapp

这篇具有很好参考价值的文章主要介绍了什么是Dapp?带你从零开始搭建一个Dapp。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是Dapp?零基础带你搭建一个Dapp

前言:Dapp就是去中心化应用,它和我们平时使用的App(微信,支付宝等)只差了一个去中心化,如何理解这一去中心化?从体验层面来说:Dapp中并没有管理者,大家都是平等的,互相监督;而从技术层面来说:传统的App和部署在服务器的后端产生交互,而Dapp则是和部署在区块链上的智能合约产生交互。

本篇文章带大家实现一个简单Dapp的搭建,通过实战让你进一步了解Dapp,跟着做就行了!

1.DApp实现之合约编写

  • 打开Remix编辑器
  • 新建InfoContract.sol文件,并将下面合约内容Copy上去

编写InfoContract合约

// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.0;

contract InfoContract{
    string name;
    uint256 age;

    function setInfo(string memory _name,uint256 _age) public {
        name = _name;
        age = _age;

    }

    function getInfo() public view returns(string memory,uint){
        return (name,age);
    }
}

2.DApp实现之前端编写

2.1创建一个新文件夹Dapp

并用VScode或者Atom打开该文件夹(选择你自己使用的编辑器即可)

2.2Dapp中创建index.htmlindex.css

index.html

<html>

<head>
    <title>Dapp Demo</title>
    <link rel="stylesheet" type="text/css" href="index.css">
</head>

<body>
    <div class="container">
        <h1>
            First Dapp
        </h1>

        <h2 id="info"></h2>

        <label>姓名:</label>
        <input id="name" type="text">

        <label>年龄:</label>
        <input id="age" type="text">

</body>

</html>

index.css

body {
    background-color: #f0f0f0;
    padding: 2em;
    font-family: 'Raleway','Source Sans Pro','Arial';

}

.container{
    width: 40%;
    margin: 0 auto;
}

label{
    display: block;
    margin-bottom:10px;
}

input{
    padding: 10px;
    width: 50%;
    margin-bottom: 1em;
}

button{
    margin: 2em 0;
    padding: 1em 4em;
    display: block;
}

#info{
    padding: 1em;
    background-color: #fff;
    margin: 1em 0;
    border: 1px solid;
}

2.3效果图预览

什么是Dapp?带你从零开始搭建一个Dapp

3. DApp实现之Web3与合约交互

3.1安装web3库

推荐使用第三种方法,因为不用安装任何环境

- Node
npm install web3
- Yarn
yarn add web3
- CDN

由于以太坊舍弃了web3的脚本使用方法,所以这里我们临时使用替代脚本

<!-- The legacy-web3 script must run BEFORE your other scripts. -->
    <script src="https://unpkg.com/@metamask/legacy-web3@latest/dist/metamask.web3.min.js"></script>
    <!-- 或者用 -->
    <script src="https://unpkg.com/@metamask/legacy-web3@latest/dist/metamask.web3.js"></script>

Tip: 若web3难以安装,建议参考这篇文章解决npm安装web3模块失败问题

3.2 Web3调用合约

参考文档:web3.eth.contract

3.2.1获取合约的abi

什么是abi?可以去复习之前的课程

  • 回到Remix编辑器的编译器界面
  • 点击右下角的Compilation Details按钮

什么是Dapp?带你从零开始搭建一个Dapp

  • 复制abi内容

什么是Dapp?带你从零开始搭建一个Dapp

3.2.2部署合约

需要保证你的小狐狸钱包里有bnb余额

  1. 选择Injected Web3环境,点击Deploy部署

什么是Dapp?带你从零开始搭建一个Dapp

  1. 在小狐狸钱包中点击确认,交上部署合约的gas费
  1. 部署成功!

什么是Dapp?带你从零开始搭建一个Dapp

  1. 在左侧已部署合约中Copy合约地址

什么是Dapp?带你从零开始搭建一个Dapp

我的合约地址是0x528f48F5EbCbf25061e8814328A0073294ED58Cb

3.2.3编写Script脚本
<script>
    
        console.log(web3)
        web3.setProvider('ws://localhost:8545');
        //获取介绍内容
        const introduction = document.getElementById('info')
       
         //通过abi初始化合约
        var infoContract = web3.eth.contract(
            [{
                    "inputs": [],
                    "name": "getInfo",
                    "outputs": [{
                            "internalType": "string",
                            "name": "",
                            "type": "string"
                        },
                        {
                            "internalType": "uint256",
                            "name": "",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function"
                },
                {
                    "inputs": [{
                            "internalType": "string",
                            "name": "_name",
                            "type": "string"
                        },
                        {
                            "internalType": "uint256",
                            "name": "_age",
                            "type": "uint256"
                        }
                    ],
                    "name": "setInfo",
                    "outputs": [],
                    "stateMutability": "nonpayable",
                    "type": "function"
                }
            ]
        );

        //通过地址实例化合约
        var info = infoContract.at('0x528f48F5EbCbf25061e8814328A0073294ED58Cb')

        //从合约获取消息
        info.getInfo(function (error, result) {
            if (!error) {
                //修改介绍内容
                introduction.innerHTML = result[0] + '(' + result[1] + 'years old)'
            }
        })
      
        
    </script>
3.2.4 更改合约信息

注意仍要在injected web3环境下更改,并且这将会收取一定的gas费用,小狐狸钱包上点击确认即可!

什么是Dapp?带你从零开始搭建一个Dapp

更改成功!

什么是Dapp?带你从零开始搭建一个Dapp

3.2.5前端显示

什么是Dapp?带你从零开始搭建一个Dapp

恭喜你!至此你已经实现了人生中第一次与智能合约的交互!

💎举一反三

我们通过调用该合约的getInfo()的方法,获取了我们设置的信息,并让它在前端显示出来。那么该如何通过前端去更新我们智能合约的信息呢?

index.html全部代码

index.css无需改动,用之前的即可

<html>

<head>
    <title>Dapp Demo</title>
    <link rel="stylesheet" type="text/css" href="index.css">
    <script src="https://unpkg.com/@metamask/legacy-web3@latest/dist/metamask.web3.min.js"></script>
</head>

<body>
    <div class="container">
        <h1>
            First Dapp
        </h1>

        <h2 id="info"></h2>

        <label>姓名:</label>
        <input id="name" type="text">

        <label>年龄:</label>
        <input id="age" type="text">

        <button id="button">更新</button>
    </div>
    <script>
        console.log(web3)
        web3.setProvider('ws://localhost:8545');
        //获取介绍内容
        const introduction = document.getElementById('info') 
        
        //通过abi初始化合约
        var infoContract = web3.eth.contract(
            [{
                    "inputs": [],
                    "name": "getInfo",
                    "outputs": [{
                            "internalType": "string",
                            "name": "",
                            "type": "string"
                        },
                        {
                            "internalType": "uint256",
                            "name": "",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function"
                },
                {
                    "inputs": [{
                            "internalType": "string",
                            "name": "_name",
                            "type": "string"
                        },
                        {
                            "internalType": "uint256",
                            "name": "_age",
                            "type": "uint256"
                        }
                    ],
                    "name": "setInfo",
                    "outputs": [],
                    "stateMutability": "nonpayable",
                    "type": "function"
                }
            ]
        );
        
        //通过地址实例化合约
        var info = infoContract.at('0x528f48F5EbCbf25061e8814328A0073294ED58Cb')

        //从合约获取消息
        info.getInfo(function (error, result) {
            if (!error) {
                //修改介绍内容
                introduction.innerHTML = result[0] + '(' + result[1] + 'years old)'
            }
        })
      
        
    </script>

</body>

</html>

💎欢迎关注个人博客(区块链方向)

77Brother的技术小栈文章来源地址https://www.toymoban.com/news/detail-453702.html

到了这里,关于什么是Dapp?带你从零开始搭建一个Dapp的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 教你从零开始画echarts地图

    离线地图下载地址https://datav.aliyun.com/tools/atlas/index.html echarts文档地址https://echarts.apache.org/zh/option.html 基于VUE编写,其他框架请自行转换,大同小异 先让地图内容出来,npm安装步骤省略,请参考官方文档,创建的div必须设置宽度和高度,关于图表的宽高自适应,参考我的另一

    2023年04月17日
    浏览(31)
  • 教你从零开始准备美赛!这些问题你都清楚了吗?

    写在前面 离2024年的数学建模美赛越来越近啦,大家都准备的怎么样呢?对于备赛还没有头绪的同学,今天,岛主就为大家介绍一下 如何从零开始准备美赛! 本期推文包括 数学建模的组队篇、练习篇和竞赛篇 ,是不可多得的数学建模保姆级教程,手把手教你怎么从零开始准

    2024年02月01日
    浏览(31)
  • 从零开始,搭建一个简单的UVM验证平台(四)

    UVM前置基础: 1.UVM基础-factory机制、phase机制 2.UVM基础-组件(driver、monitor、agent...) 3.UVM基础-TLM通信机制(一) 4.UVM基础-TLM通信机制(二) ...还在更新 从零搭建一个UVM验证平台: 从零开始,搭建一个简单的UVM验证平台(一) 从零开始,搭建一个简单的UVM验证平台(二) 从

    2023年04月14日
    浏览(44)
  • React--》从零开始搭建一个文章后台管理系统

    目录 项目准备 项目搭建 scss预处理器的使用 配置基础路由 组件库antd的使用 开发者工具的安装 登录模块 基本样式搭建 创建表单结构 获取表单数据并进行相关登录操作 对登录模块的token进行相关处理 路由鉴权实现 后台页面模块 基本页面结构搭建 菜单高亮显示 展示个人信

    2023年04月17日
    浏览(34)
  • 热门项目、创意应用触手可及!大模型AIGC主题月带你从零玩转创意项目~

    2023年5月,飞桨开发者说 AIGC 大模型学习月劲爆来袭。14 场直播带你从零开始玩转大模型~ 首场直播《飞桨开发者说|AIGC 专题直播》明日闪耀开启! 当前,大模型层出不穷,AIGC 应用刷爆眼球。机遇与危机并存,开发者如何摸准时代的脉象创新求胜?新的技术时代背景下,

    2024年02月09日
    浏览(39)
  • 开发那点事(十六)从零开始搭建一个NFT数字藏品平台

    写在前面的话 从6月初到七月研究了将近一个月NFT 区块链这方面的东西,从啥都不会到了解原理,总算是有点成果了,在这里分享给大家。 核心大纲 百度超级链开放网络(Solidity语言) 集成openzeppelin中的ERC721合约快速完成合约开发 Springboot 作为后台开发语言调用线上合约 通

    2024年01月16日
    浏览(36)
  • 从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构

    由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的。 本篇教程给新人用于学习游戏服务器的基本知识,给新人们一些学习方向,有什么错误的地方欢迎各位同行进行讨论。 本篇教程预计使用Java+Redis+Mongo 本着先完成再完美的原则,从最简单的

    2024年02月10日
    浏览(40)
  • Spring-WebFlux使用,一文带你从0开始学明白Spring-WebFlux,学明白响应式编程

    传统的基于Servlet的Web框架,如Spring MVC,在本质上都是阻塞和多线程的,每个连接都会使用一个线程。在请求处理的时候,会在线程池中拉取一个工作者( worker )线程来对请求进行处理。同时,请求线程是阻塞的,直到工作者线程提示它已经完成为止。 在Spring5中,引入了一个新

    2024年02月03日
    浏览(27)
  • Kubernetes超详细教程,一篇文章帮助你从零开始学习k8s,从入门到实战

    k8s github地址:https://github.com/kubernetes/kubernetes 官方文档:https://kubernetes.io/zh-cn/docs/home/ k8s,全程是 kubernetes,这个名字源于希腊语,意为\\\"舵手\\\"或\\\"飞行员” k8s 这个缩写是因为 k 和 s 之间有八个字符 Google 在2014年开源了 k8s 项目,k8s 是一个用于 自动化部署、扩展和管理容器化

    2024年04月14日
    浏览(70)
  • 从零开始在 Linux 上搭建 Hadoop 平台:一个详细的教程和必备配置文件

    在信息时代,大数据处理是企业发展必不可少的一部分。Hadoop 是一种分布式计算平台,能够高效地处理大数据集。然而,搭建 Hadoop 集群可以相当复杂,需要正确配置和调整多个组件。本文将向您展示如何从零开始在 Linux 上搭建 Hadoop,以及如何配置 Hadoop 的必备文件。 选择

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包