web3以太坊开发,前后端交互中涉及到的合约

在web3以太坊开发中,往往大家交流的时候,会涉及到一些合约相关的词汇,这里重点说两个合约,一个是manager合约,另一个是registry合约。

目录

1 Manager合约

2 Registry合约

2.1 Registry合约可以做什么?

2.2 Registry合约地址长什么样?

2.3 前端代码中的Registry合约地址

3 可能还涉及一些其他合约


1 Manager合约

Manager合约通常是指一个用于管理和控制其他合约的智能合约。它可能是一个中心化的合约,也可以是一个去中心化自治组织(DAO)的核心合约。Manager合约通常具有以下功能:

  1. 权限管理: 管理对其他合约的访问权限,控制哪些地址可以调用其他合约的特定函数或执行特定操作。

  2. 合约部署和升级: 负责部署新的合约实例,并执行合约的升级或更新操作。这可以确保合约的功能和安全性得到持续改进。

  3. 事件监控和日志记录: 监视其他合约的状态变化和事件触发,并记录相关的日志信息。

  4. 资金管理: 管理与其他合约相关的资金流动,包括接收和发送加密货币资金。

  5. 错误处理: 处理其他合约调用过程中可能出现的错误情况,确保系统的稳定性和安全性。

Manager合约通常是复杂智能合约系统的核心组成部分,它通过提供统一的接口和管理功能,简化了整个系统的操作和维护。在某些情况下,Manager合约可能也具有决策权力,可以根据预定的规则和条件执行特定的操作,实现自动化的业务逻辑。

2 Registry合约

2.1 Registry合约可以做什么?

Registry合约通常是指一个存储和管理注册信息的智能合约。这种合约的主要目的是提供一个可靠、不可篡改的数据存储解决方案,用于记录和查询各种类型的信息。

Registry合约可能包含以下功能:

  1. 注册信息存储: 记录和存储各种类型的注册信息,如资产所有权、身份信息、合约地址等。

  2. 信息查询: 允许用户查询注册信息,以便验证或检索关键数据。

  3. 权限控制: 管理对注册信息的访问权限,确保只有授权用户才能查询或修改特定的信息。

  4. 审计和历史记录: 记录对注册信息的修改历史,以便进行审计和追溯。

  5. 事件触发: 当注册信息发生变化时,触发相应的事件通知其他系统或用户。

Registry合约通常被用于解决各种分布式应用程序中的注册和身份验证问题。例如,在数字资产领域,Registry合约可以用于记录资产所有权信息;在身份验证领域,Registry合约可以用于存储和验证用户的身份信息。通过使用区块链技术,Registry合约可以实现数据的不可篡改性和去中心化存储,从而提高数据的可信度和安全性。

2.2 Registry合约地址长什么样?

一说到Registry合约地址,你得知道这是一长串的地址,16进制的,以0x开头的,长度除了0x以外,还有40位字符,意思就是一共42位。

Registry合约地址是一个由40个十六进制字符(0-9,a-f)组成的字符串,它是在合约部署到以太坊网络上后由以太坊虚拟机(EVM)计算得出的。每个以太坊合约在部署时都会有一个唯一的地址。

一个Registry合约地址的示例可能如下所示:

0x1a5b8d7475f70b5a5a992d7b9f3144412d9e4242

在这个示例中,0x代表这是一个以太坊地址,并且后面的40个字符组成了合约的唯一标识符。

在以太坊中,合约地址的生成是通过将合约的创建者地址和创建时的随机数(称为nonce)结合在一起,再通过哈希算法(一般是Keccak-256哈希算法)计算得到的。这个过程确保了每个合约都有一个唯一的地址,并且地址是不可预测的。

2.3 前端代码中的Registry合约地址

这个Registry合约地址,在前端与链交互过程中一定会常常被用到,所以需要被设置在一个公共的变量处。之前我们讲了链id和rpcUrl的设置,其实可以把Registry合约地址设置在那个地方

chainConfig: {
    rpcUrls: ..., // 与链交互的地址
    blockExplorerUrls: ..., // 钱包跳转地址
    registryAddress: '0x1a5b8d7475f70b5a5a992d7b9f3144412d9e4242',
}

3 可能还涉及一些其他合约

除了manager合约和registry合约之外,以太坊交互中可能还涉及其他类型的合约,具体取决于应用场景和需求。以下是一些可能的合约类型:

  1. Factory合约: 负责创建其他合约实例的合约。Factory合约通常用于在区块链上部署新的合约实例,并返回其地址。

  2. 代币合约: 用于创建和管理代币的合约。代币合约可以实现各种不同类型的代币标准,如ERC-20、ERC-721等。

  3. 支付合约: 处理加密货币支付的合约,用于确保支付的安全性和可追溯性。

  4. 治理合约: 用于管理和执行去中心化自治组织(DAO)或其他形式的治理机制的合约。治理合约可能包括投票、提案和决策功能。

  5. 保险合约: 用于提供区块链上的保险服务,自动执行赔付条件并管理保险资金。

  6. 市场合约: 提供商品或服务交易的合约,可以实现拍卖、定价和撮合功能。

  7. 身份合约: 管理和验证用户身份的合约,用于实现去中心化身份管理解决方案。

  8. 预言机合约: 用于将外部数据引入区块链,供其他智能合约使用。预言机合约通常用于实现与外部世界的信息交互。

这些只是一些示例,实际上可以根据需求开发各种类型的智能合约。在以太坊生态系统中,合约可以根据需要相互交互和调用,构建出更复杂的分布式应用程序。

  • 35
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
好的,以下是一个简单的前端web3应用程序,用于与上面编写的ERC20智能合约交互: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Web3 App</title> <script src="https://cdn.jsdelivr.net/npm/web3@1.3.5/dist/web3.min.js"></script> </head> <body> <h1>Web3 App</h1> <p>Account: <span id="account"></span></p> <p>Balance: <span id="balance"></span> ERC20 tokens</p> <input id="to" type="text" placeholder="Recipient address"> <input id="value" type="text" placeholder="Amount"> <button onclick="transfer()">Transfer</button> <script> window.addEventListener('load', async () => { if (typeof window.ethereum !== 'undefined') { await window.ethereum.enable(); const web3 = new Web3(window.ethereum); const contractAddress = 'CONTRACT_ADDRESS'; const contractAbi = [{ 'constant': true, 'inputs': [{'name': '', 'type': 'address'}], 'name': 'balanceOf', 'outputs': [{'name': '', 'type': 'uint256'}], 'payable': false, 'stateMutability': 'view', 'type': 'function' }, { 'constant': true, 'inputs': [], 'name': 'name', 'outputs': [{'name': '', 'type': 'string'}], 'payable': false, 'stateMutability': 'view', 'type': 'function' }, { 'constant': false, 'inputs': [{'name': '_to', 'type': 'address'}, {'name': '_value', 'type': 'uint256'}], 'name': 'transfer', 'outputs': [{'name': 'success', 'type': 'bool'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function' }, { 'constant': true, 'inputs': [], 'name': 'symbol', 'outputs': [{'name': '', 'type': 'string'}], 'payable': false, 'stateMutability': 'view', 'type': 'function' }, { 'constant': false, 'inputs': [{'name': '_spender', 'type': 'address'}, {'name': '_value', 'type': 'uint256'}], 'name': 'approve', 'outputs': [{'name': 'success', 'type': 'bool'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function' }, { 'constant': true, 'inputs': [{'name': '', 'type': 'address'}, {'name': '', 'type': 'address'}], 'name': 'allowance', 'outputs': [{'name': '', 'type': 'uint256'}], 'payable': false, 'stateMutability': 'view', 'type': 'function' }, { 'constant': false, 'inputs': [{'name': '_from', 'type': 'address'}, {'name': '_to', 'type': 'address'}, { 'name': '_value', 'type': 'uint256' }], 'name': 'transferFrom', 'outputs': [{'name': 'success', 'type': 'bool'}], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'function' }, { 'inputs': [{'name': '_name', 'type': 'string'}, {'name': '_symbol', 'type': 'string'}, { 'name': '_totalSupply', 'type': 'uint256' }], 'payable': false, 'stateMutability': 'nonpayable', 'type': 'constructor' }, { 'anonymous': false, 'inputs': [{'indexed': true, 'name': '_from', 'type': 'address'}, { 'indexed': true, 'name': '_to', 'type': 'address' }, {'indexed': false, 'name': '_value', 'type': 'uint256'}], 'name': 'Transfer', 'type': 'event' }, { 'anonymous': false, 'inputs': [{'indexed': true, 'name': '_owner', 'type': 'address'}, { 'indexed': true, 'name': '_spender', 'type': 'address' }, {'indexed': false, 'name': '_value', 'type': 'uint256'}], 'name': 'Approval', 'type': 'event' }]; const contract = new web3.eth.Contract(contractAbi, contractAddress); const accounts = await web3.eth.getAccounts(); const account = accounts[0]; document.getElementById('account').textContent = account; const balance = await contract.methods.balanceOf(account).call(); document.getElementById('balance').textContent = balance; transfer = async () => { const to = document.getElementById('to').value; const value = document.getElementById('value').value; await contract.methods.transfer(to, value).send({from: account}); location.reload(); }; } else { alert('Please install MetaMask to use this dApp!'); } }); </script> </body> </html> ``` 在这个应用程序,我们使用了web3.js库来与以太坊网络交互,首先需要检查MetaMask是否已安装并启用。然后,我们使用智能合约地址和ABI创建了一个智能合约实例,以便可以与合约交互。我们还获取了当前用户的帐户和智能合约该帐户的余额,并将其显示在页面上。最后,我们定义了一个转移函数,该函数在用户输入收件人地址和金额后,调用智能合约的“transfer”函数来发送代币,并重新加载页面以更新余额。 请注意,在这个示例,你需要将“CONTRACT_ADDRESS”替换为你部署的ERC20智能合约的地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

经海路大白狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值