区块链入门-0xGame-Blockchain

[Week 1] 肘,上链!

环境配置

MetaMask

浏览器插件商店搜索并添加即可,然后创建一个账户(建议使用chrome)

Remix

Solidity语言的一个在线ide网站-Remix:https://remix.ethereum.org/

python的web3库

安装命令:pip install web3

开始复现

先nc连上去创建个账户

1.jpg

第一句话告诉我们,我们的任务是要让isSolved函数的返回值为ture

再nc连接一遍,这次输入2,填入之前给的token获取合约地址(contract address)

模块2.jpg

然后打开MetaMask添加到测试网络,并切换到此网络

2.jpg

先到题目所给水龙头地址接点水,因为部署合约需要支付一定的费用

3.jpg

faucet.jpg

将自己钱包地址粘贴到框框中,点击Request,稍等一会,测试币就到账了

然后获取此题目的合约代码

合约代码.jpg

合约代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.0;

contract Signin {
bytes32 signin;

constructor () {}

function sign(bytes32 _signin) public {
signin = _signin;
}

function isSolved() public view returns (bool) {
string memory expected = "Hello0xBlockchain";
return keccak256(abi.encodePacked(expected)) == signin;

}
}

打开后新建一个名为test的文件(名称随机即可,sol后缀会自动补全),粘贴代码 编译合约,然后选择Injected Provider - MetaMask,如图:

选择环境.jpg

这时MetaMask会跳出来,点击连接就好了

然后将之前获取的合约地址(contract address)填入 “At Address”后面的框框中,然后点击 “At Address”

下面一步就是要编写脚本了,这个合约代码不难,要求传的值需要与”Hello0xBlockchain”的keccak256哈希值相同就行,让gpt跑个脚本,需要用到web3的库

安装命令:pip install web3

下面贴一下官方wp里的脚本

1
2
3
4
5
6
from web3 import Web3
s=b"Hello0xBlockchain"
w3 = Web3()
hash_bytes = w3.keccak(s)
hash_hex = hash_bytes.hex()
print(hash_hex)

在得到的结果前面加上0x 然后填到Sign框框中,点击Sign,这时会跳出一个交易的对话框,点击确认

看到绿色的勾勾时就说明成功了,然后点击isSolved,看到成功返回值了

ture.jpg

然后回到nc连接,选择3,输入token就能拿到flag啦

flag.jpg

小结

这是我第一次做Blockchain题目,不足之处还请大佬指出。了解了区块链的一些知识和做题步骤,但这仅仅是开始,以后会多加学习区块链相关知识。