web3系列———2.以太坊与智能合约

扫盲系列--Web3智能合约+Solidity简介 这几天web3智能合约这个概念,频繁映入我的眼帘。web3.0这个概念我听说过,核心特征是去中心化、开放性、隐私保护和数据所有权回归个人。Web 1.0是信息浏览时代,Web 2.0是用户参与和社交网络时代,Web 3.0是去中心化与智能化时代。在Web3.0这一新的互联网架构下,用户不再仅仅是内容的消费者,更是自己数字身份和数据的拥有者。Web 3.0旨在构建一个更加透明、安全且高效的信息网络。我对Web3.0的了解是一些比较宽泛的东西,这次想比较详细的了解一下web3中的智能合约。智能合约。 阅读详情

主流币:

中本聪设计的比特币大获成功后,各种区块链和其对应的加密货币层出不穷,其中不乏新技术的使用,不过大部分的模仿货币最后都销声匿迹了,最终存活并存有大量用户的被称作主流币。

BTC比特币
ETH以太坊
LTC莱特币
XRP瑞波币
USDT (代币)
USDC (代币)
BUSD (代币)
…
代币是建立在现有区块链平台上的,比如以太坊。你可以用以太币(ETH)来换取这些代币,然后在特定的区块链应用程序中使用它们,就像在游乐园里使用游戏币一样。这些代币没有自己的区块链,它们依赖于别的区块链平台来运行和管理。

其中BTC毫无疑问是当今老大,而**ETH(以太坊)**因为其开创了智能合约平台,使区块链进入2.0时代,坐稳老二的位置。
从以太坊开始,区块链技术号称不再局限于加密货币领域,而是推广到整个web行业,催生出web3.0。

如何理解以太坊:

比特币网络中,每一个区块中只有转账记录,是否可以存点别的东西来提高其扩展性?
以太坊创始人Vitalik和其团队,设计了一种脚本语言Solidity和以太坊虚拟机,程序员可以将用这种语言写的代码,打包成字节码,一起存在区块链上。
以太坊的节点客户端都内置了虚拟机,可以执行这个区块中的代码,实现一些自定义操作。

所以以太坊不仅被理解为一种加密货币,也是一个执行代码的平台,这种代码被称为智能合约。

智能合约有什么用:

见仁见智,关键是理解这种想法,无非在前面区块中写死了一些函数代码,可以供后面的区块调用。各种新概念的仍源于区块链的公开性和不可篡改性。比如:

用于募捐:在5天内募集5000个单位的货币。如果在截止日期前没有达到目标金额,合约将自动将资金退还给捐款人
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract Fundraiser {
    // 定义募捐目标和截止时间
    uint public constant TARGET = 5000 ether;
    uint public constant DEADLINE = block.timestamp + 5 days;

    // 记录捐款人和捐款金额
    mapping(address => uint) public contributions;
    address public owner;
    uint public totalContributions;

    // 构造函数,设置合约拥有者
    constructor() {
        owner = msg.sender;
    }

    // 接收捐款的函数
    function contribute() external payable {
        require(block.timestamp < DEADLINE, "募捐已结束");
        contributions[msg.sender] += msg.value;
        totalContributions += msg.value;
    }

    // 检查是否达到目标,若未达到则退款
    function checkGoalReached() external {
        require(block.timestamp >= DEADLINE, "募捐尚未结束");
        if (totalContributions < TARGET) {
            refundAll();
        }
    }

    // 退款给所有捐款人
    function refundAll() internal {
        for (uint i = 0; i < contributors.length; i++) {
            address contributor = contributors[i];
            uint amount = contributions[contributor];
            (bool success, ) = contributor.call{value: amount}("");
            require(success, "退款失败");
            contributions[contributor] = 0;
        }
        totalContributions = 0;
    }

    // 提取资金,只有在达到目标后才能调用
    function withdraw() external {
        require(msg.sender == owner, "只有合约拥有者才能提取资金");
        require(totalContributions >= TARGET, "未达到募捐目标");
        require(block.timestamp >= DEADLINE, "募捐尚未结束");

        (bool success, ) = owner.call{value: address(this).balance}("");
        require(success, "提款失败");
    }

    // 用于接收未标记为contribute的ETH
    receive() external payable {
        contribute();
    }
}

将这个合约存到区块链中,每一个人就可以调用里面的函数来捐钱到指定地址,也不用担心对方卷钱跑路。

由智能合约衍生的玩法还有很多,否则也不能这么火。
问了下GPT,回答如下:
智能合约是区块链技术的一项重要应用,它可以自动执行合同条款,从而提高效率并减少中介成本。以下是一些智能合约的实际应用例子:

  1. 金融领域:智能合约可以用于自动化的资产清算、保险理赔和资产交易。例如,它们可以在确定的条件下自动执行支付和结算。

  2. 管理领域:在组织管理中,智能合约可以帮助实现透明和自动化的决策过程,如DAO(去中心化自治组织)使用智能合约来管理组织的规则和资金。

  3. 医疗领域:智能合约可以用于安全地共享医疗数据,保护患者隐私的同时,提高数据访问和处理的效率¹。

  4. 物联网与供应链:智能合约可以用于自动化的物流跟踪、产品真伪验证和库存管理,从而提高供应链的透明度和效率。

  5. 共享经济:例如,智能合约可以用于自动处理共享资源的租赁和支付,如共享汽车或共享住宿的支付处理。

  6. 投票系统:智能合约可以创建一个安全、透明且不可篡改的投票系统,确保选举的公正性。

代币与如何发行代币:

代币(Token)是区块链中的一种数字资产,可以代表货币、时间、服务、公司股份、虚拟宠物等各种实物或虚拟事物。代币通常通过智能合约来发行,任何人都可以发行自己的代币。
通过编写智能合约中的函数,可以允许用户将原生加密货币转入合约地址,从而换取一定数量的代币。
代币可以是可互换的(fungible)或不可互换的(non-fungible),取决于它们所代表的实物或虚拟事物的特性。
社区制定了一些标准(如ERC20、ERC721和ERC777)来规范智能合约与其他合约的互操作性。ERC20是用于可互换资产的最常见的代币标准,而ERC721则是用于不可互换代币的标准,通常用于收藏品和游戏。

发行ERC20标准代币:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

//发行代币,代币和原生币的汇率为1比1
contract MyToken is ERC20 {
    constructor() ERC20("MyToken", "MT") {
        _mint(msg.sender, 1000000 * (10 ** uint256(decimals())));
    }

//转账函数
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        require(amount <= balanceOf(msg.sender), "Insufficient balance");
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

//查询地址内余额
    function balanceOf(address account) public view returns (uint256) {
        return super.balanceOf(account);
    }
}

web3分布式应用程序(Dapp):

当前,不管是C/S(客户端-服务端)架构还是B/S(浏览器服务端)架构的应用程序,都是用户安装一个前端app或者从浏览器访问网页前端,通过api与企业的服务器进行交互,数据存放在企业自己的数据库中。

Dapp(分布式app),每一个Dapp既是一个前端也是一个节点,用户的数据全部存入去中心化的区块链中,隐私数据可以端到端加密后再存入,没有任何人能修改删除你的数据。可以说,对于去中心化的(分布式)app,典型后端这一说法不再适用。

特征Web2应用程序Web3应用程序
中心化数据和服务由单一公司或组织控制应用程序运行在区块链上,没有中心化的控制
数据所有权用户数据归服务提供商所有用户拥有自己的数据和身份
可扩展性交易和操作速度较快可能因为去中心化而速度较慢
支付集成调用中心化的第三方支付接口通过原生代币内置支付功能
可编程性开放程度有限,自定义程度低图灵完备,可以编写复杂程序
限制依赖中心化服务器交易速度慢,用户体验和成本方面有挑战

Dapp发展现状:

当前大部分Dapp并不是完全体,只是传统前后端+(链端)智能合约。
省略…

潜力巨大,前景广阔,道阻且长。
只能说,祝它成功吧!

以太坊虚拟机EVM介绍,智能合约详解 指的是“一套以数字形式指定的承诺,包括合约参与方可以在上面执行这些承诺的协议”。早在1994年,美国计算机科学家尼克·萨博(Nick Szabo)就提出了智能合约的概念。智能合约是一种基于区块链技术的自动执行合约的计算机程序。它们是一组以代码形式编写的、在区块链上运行的规则和逻辑。智能合约定义了在满足特定条件时应该执行的操作,而无需中介方的干预。以太坊是最为著名的支持智能合约的区块链平台之一。在以太坊中,智能合约是用一种称为Solidity的编程语言编写的。 阅读详情

相关推荐

java类库web3j开发以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链的开发,而无需为你的应用平台编写集成代码。 快速启动 想要快速启动的话,有一个Web3j demo示例项目可用,演示了通过Web3j开发以太坊的许多核心特征,其中包括: 连接到以太网...

mongo_node的专栏 5146

以太坊智能合约:从概念到实操指南

智能合约是一组自动执行预定义规则的代码,类似于我们生活中的自动售货机。当用户选择商品并支付后,售货机会自动释放商品,用户不必担心交易的信任问题,因为售货机按照预设的程序操作。类似地,信用卡的自动还款也是一种实现了智能合约逻辑的机制:在设定自动还款之后,到期时系统会自动扣款。智能合约的这一概念,在数字货币和区块链领域得到了更深入的应用和发展。2008年,一个化名为中本聪的人或团队发表了《比特币:一种点对点的电子现金系统》论文,这标志着比特币的诞生。

Reveone的博客 4905

python如何使用web3py与以太坊投资智能合约交互

在以太坊和其他区块链中,仍有很多被证明的概念正在实施,开发人员在尝试如何应对这些新概念。作为dInvest 系列文章一部分,我也在研究以太坊并尝试在区块链中实施对冲基金。在上一篇文章中,我讨论了如何在python中启动和运行定量框架。在这篇文章中,我将介绍如何将python程序与以太坊智能合约集成。出于这样或那样的原因,可能也面临着这个问题,尽管以太坊提供了图灵完备语言,但并不是所有事情都能完成。...

QQ2932580080的博客 2407

以太坊(3)——智能合约

美链(Beauty Chain)是一个部署在以太坊上的智能合约,有自己的代币BEC。ICO:Initial Coin Offering没有自己的区块链,代币的发行、转账都是通过调用智能合约中的函数来完成的可以自己定义发行规则,每个账户有多少代币也是保存在智能合约的状态变量里ERC 20(Ethereum Request for Comments)是以太坊上发行代币的一个标准,规范了所有发行代币的合约应该实现的功能和遵循的接口。

Hock2023的博客 4829

使用web3.js监听以太坊智能合约event

传送门: 柏链项目学院 使用web3.js监听以太坊智能合约event   当我们在前端页面调用合约时发现有些数据不会立即返回,这时还需要再调用更新数据的函数。那么这样的方法使用起来非常不便,监听event就可以很好的解决这样的问题,下面我们来看看如何监听event。以下内容基于web3.js1.0版本,版本不同可能会代码差异。 1. 修改geth启动参数 全部参数如下 geth --d...

P叔的博客 3287

python和web3py与以太坊投资智能合约交互

在以太坊和其他区块链中,仍有很多被证明的概念正在实施,开发人员在尝试如何应对这些新概念。作为dInvest 系列文章一部分,我也在研究以太坊并尝试在区块链中实施对冲基金。在上一篇文章中,我讨论了如何在python中启动和运行定量框架。在这篇文章中,我将介绍如何将python程序与以太坊智能合约集成。出于这样或那样的原因,可能也面临着这个问题,尽管以太坊提供了图灵完备语言,但并不是所有事情都能完成。...

mongo_node的专栏 1556

Web3 新手如何部署第一个智能合约?

智能合约作为一种定义一组规则的程序或“合约”,当用户在区块链上调用时,会自动执行编码的规则;你可以免费下载并创建 Metamask 帐户,创建帐户时,若你已有一个帐户,请确保切换到右上角的“Goerli 测试网络”(这样我们就不会处理真实资产)。简单来说,我们使用的是 Alchemy 上的免费帐户,这是一个区块链开发者平台和 API,允许我们与以太坊进行通信而无需运行个人节点。这里的两个重要调用是将我们的合约实际写入 Ropsten 链的请求,以及根据哈希值读取有关交易的信息请求(发送交易的典型模式)——

TinTinCommunity的博客 2293

web3j以太坊智能合约流程浅析

这篇可能是第一篇,以及最后一篇写区块链的文章。后续就从项目组离开了,不知道还能不能接触了。言归正传。这次历时两个月左右的项目,主要在智能合约开发上。简单讲讲里面的一些东西。1、web3j原理web3j是一套访问以太坊rpc服务的java sdk,简单的说就是封装了 http调用的业务sdk包。有什么业务,主要看etherum-harmony提供的接口,而不是以太坊有什么服务。web3j的创建有Tr...

Zero的蜗牛小屋 2784

Web3.js的基本使用(与以太坊智能合约的交互)

目录标题web3.js介绍web3 模块加载异步回调(callback)回调 Promise 事件(v1.0.0)常用 API —— 基本信息查询查看 web3 版本查看 web3 连接到的节点版本(clientVersion)基本信息查询获取 network id获取节点的以太坊协议版本网络状态查询是否有节点连接/监听,返回true/false查看当前连接的 peer 节点Provider查看当前设置的 web3 provider查看浏览器环境设置的 web3 provider(v1.0.0) • web

david2000999的博客 3万+

MetaMask与Web3中智能合约调用

MetaMask 是一款浏览器插件钱包,简称小狐狸,可以连接以太坊实现购买NFT,只需添加至浏览器扩展程序即可使用,非常方便。 下载链接要验证浏览器是否正在运行 MetaMask 当安装成功后可以直接调用MetaMask进行登录 method中的eth_requestAccounts其实就是Web3中方法web3.eth.requestAccounts,该方法为请求账户(注注注:此方法仅在您使用来自 Metamask等应用程序的注入提供程序时才有效。直接调用无效) 十六进制 十进制 网络 0

qq_44001572的博客 4049

web3j教程:java和android如何使用web3j开发以太坊智能合约并进行交易

从广义上讲,有web3j支持三种类型的以太坊交易: 1.以太币从一方交易到另一方 2.创建一个智能合约 3.与智能合约交易 为了进行这些交易,必须有以太币(以太坊区块链的代币)存在于交易发生的以太坊账户中。这是为了支付gas成本,这是为支付参与交易的以太坊客户端的交易执行成本,支付了这个成本就能将结果提交到以太坊区块链上。获得以太币的说明下文会说到。 此外,我们还可以查询智能合约的状态。...

mongo_node的专栏 3061

以太坊智能合约交互调用,web3.js,web3j两种方式实现

导语 接上篇文章 《使用hardhat部署solidity智能合约到测试网》 部署完合约之后,那么如何区块链进行交互呢?这节的主要内容就是使用web3.js和web3j来与区块链以及链上的合约进行交互。其中web3.js是属于javascript的版本的, web3j是java版本的。 合约交互的类型 以太坊可以看做一个公共数据库,这个数据库提供了读、写功能,但是不能删除。 发起交易其实就是将交易写库,写库不能白写,其他节点帮你记录了数据,你要支付一些费用给帮你记录的节点,这个费用就是我们经常看到的gas。

qq_36838406的博客, 微信交流 yrn1840 7859

使用Web3.js与以太坊交互

Web3.js是以太坊官方提供的JavaScript库,用于与以太坊网络进行交互。通过Web3.js,我们可以轻松地在JavaScript中编写智能合约的交互逻辑,如创建新的合约实例、调用合约方法、监听合约事件等。本文将介绍如何使用Web3.js与以太坊进行交互。

Mzxy_1的博客 1066

Web3j实现智能合约

1 获取凭证 Credentials是我们钱包的凭证,在我们交易和创建智能合约的时候都需要用到。 1.1 创建新凭证 file=WalletUtils.generateFullNewWalletFile(pwd,dir); 返回的file不是全路径,而是该文件的路径名,比如UTC—2017-10-30T12-10-45.516005546Z—5f38056f45091ee992298e53...

跨链技术践行者 1万+

如何使用Web3在浏览器中与智能合约进行交互

2018-4-20 技术文章 Web3.js是以太坊官方的Javascript API,可以帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互。实际上就是一个库的集合,主要包括下面几个库: web3-eth用来与以太坊区块链和智能合约交互 web3-shh用来控制whisper协议与p2p通信以及广播 web3-bzz用来与swarm协议交互 web3-utils包含了...

D256 4482

【Web3 开发系列教程—创建你的第一个智能合约(1)】什么是智能合约

什么是智能合约? 以太坊在 2013 年的核心创新是允许开发人员编写称为智能合约的小代码块,这些代码可以部署到以太坊网络,独立于其创建者运行。 在以太坊中,智能合约是用 Solidity 编写的,这是一种设计用于在以太坊虚拟机上运行的高级编程语言。智能合约也成为了区块链开发领域主要的研究方向之一。 智能合约是定义一组规则或“合约”的程序,当用户在区块链上调用时,它会自动执行编码规则。 特别地,一旦部署了智能合约,它就不能被修改或控制。因此,智能合约是运行金融应用程序的理想选择,它们可以作为独立参与者以有保证

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 2821

【一天一个Web3概念】以太坊与智能合约:Web3世界的「操作系统」与「自动化引擎」

以太坊作为Web3核心平台,通过图灵完备的智能合约实现了去中心化应用开发。智能合约以自动化执行、不可篡改和去中心化为特点,依托以太坊虚拟机(EVM)和Gas机制运行,主流开发语言为Solidity。当前已广泛应用于DeFi、NFT和DAO等领域,但仍面临安全性、可扩展性和合规性挑战。随着Layer2解决方案和跨链技术的发展,智能合约有望成为Web3时代的基础设施,推动去中心化应用的普及。开发者需掌握相关技术,用户需理解其特性以更好地参与Web3生态。

alex100的博客 1197

VMware Workstation 不可恢复错误:(vcpu-1) Exception 0xc0000005 解决方案

1、错误信息如下:VMware Workstation 不可恢复错误:(vcpu-1) Exception 0xc0000005(access violation) hasoccurred.2、错误截图如下:3、错误原因分析:Exception 0xc0000005是访问冲突错误,通常指程序试图访问它没有权限的内存地址。在虚拟机环境中,这可能由多种因素引起,例如虚拟机配置错误、宿主机资源冲突、VMware软件问题或系统文件损坏。

m0_65065082的博客 4370

如何写一个在WEB网页中调用以太坊智能合约的DAPP

在【使用web3调用智能合约的简单例子】中,使用的是Nodejs来调用智能合约,Nodejs适合做服务器端的应用。如何在WEB网页中调用智能合约,其实方法类似,同样是使用web3.js库。网页版例子的运行效果如下图所示,更加的直观。 网页版的例子,同样的为了简单起见,仍旧直接使用Remix自带的Storage.sol合约例子,就是简单的存储和获取一个整数数值。前两个步骤 1.编写智能合约 和 2.部署智能合约 与【使用we痛痒b3调和用智能合约的简单例子 】的前两个步骤完全一样,这里主要讲述一下后面的两

wumingzhifu的博客 3140

<工控><PLC>汇川Easy521系列PLC与汇川SV630N伺服进行EtherCat通讯的相关配置及指令编写

本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如果有值得记录的内容,也会添加进来。

用沸腾的热血,支付我们的人生吧! 2万+

基于单片机直流电机调速控制系统设计

*单片机设计介绍,基于单片机直流电机调速控制系统设计。

2201_75940997的博客 2780
上一篇: web3系列———1.基础知识扫盲
下一篇: web3系列———4.编写第一个智能合约并发布到链上
nothing one
博客等级 码龄6年 691粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值