结合chatGPT几行代码实现去中心化web3存钱罐功能打造自己专属Dapp

1,048 阅读3分钟

0x0 题记

  • 需求 最近老是有小伙伴在说自己手贱,没能存住钱,错过了大的升期。其实这事吧很难讲(心理学里面有一堆解释,后面我打算解释一下)。让小伙伴以后没借口呗。整个小工具存钱罐,锁死手贱党。只要时间不到无法取钱。
  • web3实用化 经常听人说,web3没什么实用。就几行代码事情,来整一个实用存钱罐把钱存智能合约里面,存一个定期。

0x1 智能合约

  • chatGPT 有了AI人就更懒了。万事先问ChatGPT,几行代码都不想写了。输出如下:

01.png

  • 差距 AI生成代码与现实还是有一点差距。能用是能用!居然把合约整成了一次性了,还玩了一个部署即锁定不好玩。需要稍微修改一下。大概修改如下,单人将就用用。
// SPDX-License-Identifier: MIT

![01.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7cf2126e3d244216bb1b222024180aa6~tplv-k3u1fbpfcp-watermark.image?)

pragma solidity ^0.8.0;

contract SavingsPot {
    address payable public owner; // 合约所有者地址
    uint256 public lockTime; // 锁定时间
   // uint256 public depositAmount; // 存款金额

    constructor() {
         owner = payable(msg.sender); // 设置合约所有者为部署合约的地址
       // lockTime = _lockTime; // 设置锁定时间
    }

    // 存款函数,接收以太币
    function deposit(uint256 _lockTime) public payable {
        require(msg.value > 0, "Deposit amount must be greater than 0"); // 存款金额必须大于0
        require(msg.sender == owner, "Only owner can deposit"); // 只能拥有者存入
        lockTime = block.timestamp + _lockTime; //修改锁定时间增加秒
    }

    // 提款函数,只能由合约所有者调用
    function withdraw() public {
        require(msg.sender == owner, "Only owner can withdraw"); // 只有合约所有者可以提款
        require(block.timestamp >= lockTime, "Cannot withdraw until lock time"); // 锁定时间未到,不能提款
        payable(msg.sender).transfer(address(this).balance); // 将存款金额转账给合约所有者
      
    }
}
  • 解释 简单解释一下,block.timestamp为获取当前区块的时间,通过输入时间_lockTime增加多少秒来修改最终锁定时间lockTime。只有当前时间大于lockTime时间,才能解锁取钱。时间不到取不了钱防止手贱。
  • remix 在remix里面测一下,基本功能实现

05.png

0x2 前端展示

  • chatGPT画的 看着还行关键没法跑啊 02.png
  • 改改 套用以前模板改改,能跑就行 03.png

0x3 后记

  • 示例 这东西只是测试示例,当然单人用没什么问题。如果再改改其实也可以多人。安全性其实也有。唯一不安全的就是也许可能增加锁死自己。
  • 反思 其实这东西弄出来了估计小伙伴也不会用。其实真正手贱还是人心,即使有办法进行物理锁死(因为不止智能合约一种办法,还有很多解决方案),他们断然不会选择。
  • 讽刺 去中心化web3的dapp在开发的时候,很多时候都是为了去解决信任或者信用的问题。但是呢现在情况,应用钱包授权,安全性(害怕被钓鱼),用户认知不足,害怕错误操作损失等等原因,反而用户不愿意用dapp,不信任web3的dapp。如何让用户信任和使用web3 dapp又是一个难题,即使简单代码开源也无效。