# Smart Contract **Repository Path**: d_watson/Lottery ## Basic Information - **Project Name**: Smart Contract - **Description**: 抽奖智能合约 - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-01-06 - **Last Updated**: 2025-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Smart Contract #### 介绍 抽奖智能合约 奖票价格和每一轮抽奖的参与人数可以配置,初始化构造函数里面指定, 当参与人数达到每轮开奖人数最大值时,启动开奖,抽1,2,3等奖, 1等奖分这轮总的抽奖奖金的50%,2等奖分这轮总的抽奖奖金的25%,3等奖分这轮总的抽奖奖金的10%, 最后一个触发抽奖的幸运儿,分享这轮总抽奖奖金的5%, 剩下的10%放到基金仓库存起来备用。 新建一个LotteryToken,给参与抽奖的人员,返回与奖票等数量的lottery token。 Lottery token可以用来投票决定奖池基金里面的资金使用场景。 新增一个投票逻辑,发起人可以提交提案来申请从基金里面提取金额,提案包括提案标题(不允许重复),申请金额,资金用途, 其他人则对针对提案标题来投票,每次投票需要0.1的lottery token,并且每个提案,每个地址只能投票一次, 当投票达到指定数量时(构造函数指定),提案通过,发起人可以调用提现方法提取申请金额。 ADPP功能: 用ether.js实现参与抽奖的页面功能,参与部署在truffle develop中的抽奖合约, 页面通过chrome的插件metamask钱包来签名 #### 软件架构 智能合约开发: 奖票价格和每一轮抽奖的参与人数可以配置,初始化构造函数里面指定, 当参与人数达到每轮开奖人数最大值时,启动开奖,抽1,2,3等奖, 1等奖分这轮总的抽奖奖金的50%,2等奖分这轮总的抽奖奖金的25%,3等奖分这轮总的抽奖奖金的10%, 最后一个触发抽奖的幸运儿,分享这轮总抽奖奖金的5%, 剩下的10%放到基金仓库存起来备用。 新建一个LotteryToken,给参与抽奖的人员,返回与奖票等数量的lottery token。 Lottery token可以用来投票决定奖池基金里面的资金使用场景。 一个投票逻辑,发起人可以提交提案来申请从基金里面提取金额,提案包括提案标题(不允许重复),申请金额,资金用途, 其他人则对针对提案标题来投票,每次投票需要0.1的lottery token,并且每个提案,每个地址只能投票一次, 当投票达到指定数量时(构造函数指定),提案通过,发起人可以调用提现方法提取申请金额。 DAPP开发 ADPP功能: 用ether.js实现参与抽奖的页面功能,参与部署在truffle develop中的抽奖合约, 页面通过chrome的插件metamask钱包来签名 ![ui](./wiki/ui.png) ![授权](./wiki/authorization.png) ![参与抽奖](./wiki/result.png) 连接Chrome metamask的代码: ``` // 连接钱包 async function connectWallet() { if (window.ethereum) { try { // Use Web3Provider for MetaMask interaction provider = new ethers.providers.Web3Provider(window.ethereum); await window.ethereum.request({ method: "eth_requestAccounts" }); signer = provider.getSigner(); // Get the signer userAddress = await signer.getAddress(); // Get the address of the connected wallet lotteryContract = new ethers.Contract(contractAddress, contractABI, signer); console.log("contract info:", lotteryContract); console.log("Connected to wallet:", userAddress); } catch (error) { console.error("Error connecting to wallet:", error); } } else { alert("Please install MetaMask!"); } } ``` 新增Raffle智能合约,通过直接给合约地址转账来参与抽奖,每10人参与开奖一次,每人每次参与金额固定0.1, 开奖之后重新开启下一轮。中奖者分80%,最后一个参与的分10%,剩下10%分给合约创建者。 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 部署Raffle合约到zkSync Sepolia测试网: 使用Remix部署合约 1,打开Remix IDE: 访问 Remix Online IDE。 2,编写或上传你的智能合约代码: 在Remix中创建一个新的Solidity文件,并编写或上传你想要部署的智能合约。 3,编译合约:在左侧栏选择“Solidity Compiler”,选择适当的编译器版本,然后点击“Compile”。 4,配置部署环境: 点击左侧栏的“Deploy & Run Transactions”。 在Environment下拉菜单中选择“Injected Provider - MetaMask”。这会让Remix连接到你MetaMask中的zkSync Sepolia网络。 5,部署合约: 在“Deploy & Run Transactions”界面中,选择你要部署的合约。如果需要,填写任何构造函数参数。 6,点击“Deploy”按钮进行部署。此时,MetaMask应该弹出一个交易确认窗口。 7,确认交易: 在MetaMask中确认交易,支付Gas费用。等待交易完成,你就可以在zkSync Sepolia测试网上看到你的合约被成功部署了。 8,验证和交互: 部署完成后,你可以通过Remix与合约进行交互,或者前往区块浏览器查看合约详情。 测试网:https://sepolia.explorer.zksync.io/ 合约地址:0x071B15Da93E2e17afBbA16284D2Bf564f8b622a5 ![ui](./wiki/contract.png) ![ui](./wiki/send.png) #### 参与贡献 #### 特技