智能合约基本知识

合约就是个类!就是一段普普通通的程序!

区块链网络上有原生货币代币

对代币的操作,需要用代币合约的地址实例化一个对象,然后通过这个对象的相应的方法去操作,授权和转移!

1.emit 是触发一个事件,就相当于是在函数执行的过程中给你发了一个执行情况通知
2.import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
这是引入三方接口(其实就是基类)
3.智能合约中的授权操作是以IERC20接口为基础的固定函数,只有他才能发起授权操作,就是在用户的app钱包里发起一个弹窗确认

==============以下观点保留
调用 approve 函数只会在以太坊网络上生成一笔授权交易,但并不会直接触发钱包应用程序中的弹窗或提示用户进行授权。

当您调用 approve 函数时,Web3.js 或其他以太坊客户端库会向用户的钱包应用程序发送一个交易请求,并将授权交易的相关信息传递给钱包应用程序。钱包应用程序会根据具体的实现方式和用户设置,决定是否显示弹窗或提示用户进行授权。例如,大多数钱包应用程序会根据交易的 gas 费用、代币数量、目标地址等因素,自动判断是否需要显示确认对话框来征得用户的同意。

需要注意的是,不同的钱包应用程序可能会有不同的用户体验和操作方式。因此,在开发 Dapp 时,您需要考虑到用户在不同平台上的使用情况,并提供必要的说明和帮助,以确保用户能够正确地完成授权操作。

另外,由于授权是一种可撤销的操作,即用户可以随时从他们的账户中收回已经授权的代币。因此,在使用授权后,建议您及时检查授权是否还有效,并根据需要更新授权的状态或重新发起新的授权请求。

当您在 Dapp 中调用 approve 函数时,Web3.js 或其他以太坊客户端库会自动识别该函数,并使用钱包应用程序或其他交易签名工具向用户发送交易请求。这个交易请求包含了授权交易的详细信息,例如目标地址、代币数量、gas 价格等。

具体来说,Web3.js 库提供了一个名为 send 的方法,它可以用于向以太坊网络发送交易请求,并等待用户确认:

tokenContract.methods.approve(spenderAddress, amount).send({ from: userAddress })
在这个示例中,tokenContract 是 ERC20 代币合约的实例对象,spenderAddress 是被授权人的地址,amount 是需要授权的代币数量,userAddress 是进行交易的用户的地址。调用 send 方法将会生成一笔交易,并将交易请求发送给用户的钱包应用程序,等待用户确认。

需要注意的是,在发送交易请求时,Web3.js 将会查询当前钱包应用程序的状态和设置,决定是否显示确认对话框或其他提示,以征得用户的同意。不同钱包应用程序可能有不同的外观、操作方式和用户体验,因此开发者需要考虑到用户在不同平台上的使用情况,并提供必要的说明和帮助,以确保用户能够正确地完成授权操作。

========
const tokenContract = new web3.eth.Contract(tokenAbi, tokenAddress);
const amount = web3.utils.toWei("10", "ether"); // 授权 10 个代币
tokenContract.methods.approve(dappAddress, amount).send({ from: userAddress });
发起弹窗请求的关键是.approve(dappAddress, amount).send({ from: userAddress });调用approve后还要用send发送信息,这个发送就会被用户的钱包app接收到从而做出相应的界面弹窗操作@!
--》在这个示例中,tokenContract 是一个代币合约实例,amount 是需要授权的代币数量,dappAddress 是您的 Dapp 的地址,userAddress 是用户的地址。当用户通过 Metamask 或其他钱包应用程序确认交易后,该函数将会发送一笔代币授权交易到区块链上,表示将指定数量的代币从用户账户授权到您的 Dapp 地址。
========
监听授权事件:一旦授权交易被确认,您可以监听 ERC20 代币合约中的 Approval 事件,以确保授权已经生效。例如,以下是如何使用 Web3.js 监听 Approval 事件的示例代码:
tokenContract.events.Approval({ filter: { owner: userAddress } })
  .on("data", event => {
    if (event.returnValues.spender === dappAddress) {
      // 授权生效,执行需要使用代币的操作
    }
  });

-=-=-=-=-=-=-=-=-=-用户调用智能合约的原理-=-=-=-=-=
智能合约用户调用的原理可以简单概括为以下几步:

用户通过钱包应用程序或其他交易签名工具,向合约发送交易请求。
交易请求被广播到以太坊网络上,并等待区块链节点的确认。
区块链节点将交易打包进一个新的区块中,并通过共识算法达成一致。
一旦交易被确认,智能合约代码会自动执行相应的操作,根据交易的参数和合约状态更新区块链状态。
如果交易涉及到代币转移、授权等操作,智能合约还可能触发其他合约函数或事件,向其他合约或 Dapp 发送通知。
需要注意的是,智能合约用户调用的过程并不像传统的客户端-服务器架构那样,存在明显的前端和后端逻辑。在以太坊区块链上,合约本身就是一段代码,它可以被任何人或任何合约调用。因此,智能合约的使用者和开发者可以通过编写调用代码来与智能合约进行交互,并获取、更新合约状态。

另外,由于以太坊区块链是去中心化和分布式的,每个节点都有完整的账本数据副本,并且可以独立地对交易进行验证和确认。因此,在智能合约用户调用时,无需通过中心化的可信第三方或服务商来完成交互,而是直接通过区块链网络与其他节点进行通信和协作。这种去中心化、不可篡改的特点,使得智能合约在许多领域具有重要的应用前景。

钱包发送交易请求-》广播到以太网-》【交易确认】(每次调用其实就是一个交易)-》执行智能合约内的函数代码

,智能合约的使用者和开发者可以通过编写调用代码来与智能合约进行交互,并获取、更新合约状态。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>