区块链知识(一) | 实例化合约Contract

本文档介绍了从零开始学习区块链DApp的步骤,包括创建、发行代币和宠物领养应用。同时,列举并解释了在DApp开发过程中遇到的六个常见错误,如npm运行错误和合约部署问题。此外,详细阐述了如何通过合约名称或ABI+address实例化智能合约,并调用合约函数。示例中展示了如何使用web3.js来操作合约,包括call()和send()函数的使用区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学记录 · 欢迎交流
区块链DApp从零开始学 (一) | DApp抓包
区块链DApp从零开始学 (二) | 超详细 DApp创建 | 发行代币token |宠物领养

区块链知识 (一) | 实例化合约Contract

区块链报错1 | npm run dev 无法解析json格式 | npm ERR JSON.parse Failed to parse json
区块链报错2 | 区块链npm run dev失败lite-server
区块链报错3 | truffle unbox 报错 | downloading失败 | unbox failed
区块链报错4 | 区块链玄学 | truffle unbox下载downloading步骤失败
区块链报错5 | Contract has not been deployed to detect network (network/artifact mismatch)
区块链报错6 | Failed to load resource: the server responded with a status of 404 (Not Found)

想获得合约实例,首先需要部署 (deploy/migrate)网络,
可参考 该文章的环境配置的truffle部分

获得合约实例 myContract有两种方法,即通过合约名称实例化智能合约,或通过ABI+ address进行实力化

方法一

MathContract2.deployed().then(function(instance){var myContract = instance})

通过合约实例可调用合约中的函数:

myContract.mulAtoB(3,4) # 12

方法二

var myContract = new web3.eth.contract('abi','contractAddress')

其中,abi为:
在这里插入图片描述

abi要通过json压缩转为这种行的形式:
在这里插入图片描述

contractAddress为:
在这里插入图片描述
一个实际例子,

var myContract = new web3.eth.Contract([{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"mulAtoB","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}],'0x1b0127F2d5826Bd462899845A25Bda35b0132648')

ps: ’contractAdress‘以字符串形式输入

通过合约实例调用合约函数:

myContract.methods.mulAtoB(3,4).call() # 返回12

ps:
如果不加call()函数,返回的还将是json格式
call()函数表示不对其值进行改变,仅读;send()函数改变其状态,可写

### 如何使用Python编写区块链智能合约 #### 智能合约的基础概念 智能合约是在满足特定条件时自动执行合同条款的计算机程序或交易协议。其主要特点在于无需第三方介入即可实现自我验证和自我执行,这使得智能合约成为区块链技术的重要组成部分之[^2]。 #### Python智能合约框架的选择 对于希望采用Python进行智能合约开发的人来说,通常会选择结合Solidity(种专门设计用于Ethereum平台上的高级编程语言)来定义业务逻辑,并借助于像Brownie这样的工具集来进行项目管理和自动化测试;而Web3.py库则被用来简化与以太坊节点之间的通信过程。 #### 创建并部署简单智能合约实例 下面是个完整的例子,展示了怎样利用上述提到的技术栈快速搭建起个可以运行的小型应用程序: 1. **安装必要的依赖项** 需要先确保已经安装好了`brownie`以及`web3.py`这两个包。可以通过pip命令轻松完成这项工作。 ```bash pip install eth-brownie web3 ``` 2. **初始化个新的Brownie项目** 执行如下指令,在当前目录下建立名为mycontract的新工程文件夹。 ```bash brownie init mycontract cd mycontract ``` 3. **编写Solidity版本的智能合约代码** 在contracts子目录内新建SimpleStorage.sol文件,输入以下内容作为最基础的数据存储类: ```solidity pragma solidity ^0.8.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() view public returns (uint){ return storedData; } } ``` 4. **配置网络连接信息** 修改.brownie/config.yaml文档里的networks部分,指定想要使用的测试网或者本地私有链环境参数。 5. **编写Python脚本来操作智能合约** 接下来就是撰写scripts/deploy_simple_storage.py这个Python脚本了,它负责编译源码、上传至目标网络上并且调用其中的方法。 ```python from brownie import accounts, network, config, SimpleStorage def deploy_contract(): account = accounts.add(config["wallets"]["from_key"]) simple_storage = SimpleStorage.deploy({"from": account}) transaction_receipt = simple_storage.set(42,{"from":account}) value = simple_storage.get() print(f"The current value is {value}") if __name__ == "__main__": deploy_contract() ``` 6. **运行部署脚本并与之互动** 终端里切换到项目的根路径之后,只需键入行简单的命令就可以启动整个流程啦! ```bash brownie run scripts/deploy_simple_storage.py --network development ``` 以上步骤即完成了从无到有的全过程介绍,当然实际应用场景可能会更加复杂些,涉及到更多细节方面的考量。不过只要掌握了这套基本模式,后续深入学习也就有了坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值