学习solidity,基础部分的作业内容
- 一个mapping来存储候选人的得票数
- 一个vote函数,允许用户投票给某个候选人
- 一个getVotes函数,返回某个候选人的得票数
- 一个resetVotes函数,重置所有候选人的得票数
题目描述:反转一个字符串。输入 "abcde",输出 "edcba"
题目描述在 https://leetcode.cn/problems/roman-to-integer/description/3.
题目描述在 https://leetcode.cn/problems/integer-to-roman/description/
题目描述:将两个有序数组合并为一个有序数组。
题目描述:在一个有序数组中查找目标值。 --- 完成记得提交你的 Git 公开仓库地址
- 合约包含以下标准 ERC20 功能:
- balanceOf:查询账户余额。
- transfer:转账。
- approve 和 transferFrom:授权和代扣转账。
- 使用 event 记录转账和授权操作。
- 提供 mint 函数,允许合约所有者增发代币。
- 使用 mapping 存储账户余额和授权信息。
- 使用 event 定义 Transfer 和 Approval 事件。
- 部署到sepolia 测试网,导入到自己的钱包
- 使用 Solidity 编写一个符合 ERC721 标准的 NFT 合约。
- 将图文数据上传到 IPFS,生成元数据链接。
- 将合约部署到以太坊测试网(如 Goerli 或 Sepolia)。
- 铸造 NFT 并在测试网环境中查看。
- 编写 NFT 合约
- 使用 OpenZeppelin 的 ERC721 库编写一个 NFT 合约。
- 合约应包含以下功能:
- 构造函数:设置 NFT 的名称和符号。
- mintNFT 函数:允许用户铸造 NFT,并关联元数据链接(tokenURI)。
- 在 Remix IDE 中编译合约。
- 准备图文数据
- 准备一张图片,并将其上传到 IPFS(可以使用 Pinata 或其他工具)。
- 创建一个 JSON 文件,描述 NFT 的属性(如名称、描述、图片链接等)。
- 将 JSON 文件上传到 IPFS,获取元数据链接。
- JSON文件参考 https://docs.opensea.io/docs/metadata-standards
- 部署合约到测试网
- 在 Remix IDE 中连接 MetaMask,并确保 MetaMask 连接到 Goerli 或 Sepolia 测试网。
- 部署 NFT 合约到测试网,并记录合约地址。
- 铸造 NFT -使用 mintNFT 函数铸造 NFT: 在 recipient 字段中输入你的钱包地址。 在 tokenURI 字段中输入元数据的 IPFS 链接。 在 MetaMask 中确认交易。
- 查看 NFT -打开 OpenSea 测试网 或 Etherscan 测试网。 连接你的钱包,查看你铸造的 NFT。
- 使用 Solidity 编写一个合约,允许用户向合约地址发送以太币。
- 记录每个捐赠者的地址和捐赠金额。
- 允许合约所有者提取所有捐赠的资金。
- 编写合约
- 创建一个名为 BeggingContract 的合约。
-
- 合约应包含以下功能:
- 一个 mapping 来记录每个捐赠者的捐赠金额。
- 一个 donate 函数,允许用户向合约发送以太币,并记录捐赠信息。
- 一个 withdraw 函数,允许合约所有者提取所有资金。
- 一个 getDonation 函数,允许查询某个地址的捐赠金额。
- 使用 payable 修饰符和 address.transfer 实现支付和提款。
- 部署合约
- 在 Remix IDE 中编译合约。
- 部署合约到 Goerli 或 Sepolia 测试网。
- 测试合约
- 使用 MetaMask 向合约发送以太币,测试 donate 功能。
- 调用 withdraw 函数,测试合约所有者是否可以提取资金。
- 调用 getDonation 函数,查询某个地址的捐赠金额。
- 合约代码:
- 使用 mapping 记录捐赠者的地址和金额。
- 使用 payable 修饰符实现 donate 和 withdraw 函数。
- 使用 onlyOwner 修饰符限制 withdraw 函数只能由合约所有者调用。
- 测试网部署:
- 合约必须部署到 Goerli 或 Sepolia 测试网。
- 功能测试:
- 确保 donate、withdraw 和 getDonation 函数正常工作。
- 合约代码:提交 Solidity 合约文件(如 BeggingContract.sol)。
- 合约地址:提交部署到测试网的合约地址。
- 测试截图:提交在 Remix 或 Etherscan 上测试合约的截图。
- 捐赠事件:添加 Donation 事件,记录每次捐赠的地址和金额。
- 捐赠排行榜:实现一个功能,显示捐赠金额最多的前 3 个地址。
- 时间限制:添加一个时间限制,只有在特定时间段内才能捐赠。