Lanford33

来写点东西吧!


  • 首页

  • 标签

  • 归档

来!写台印钞机!

发表于 2021-01-25 | 分类于 Coding

算是个 Solidity 入门级应用?

MDEX 应该是这几天币圈最火的矿了。考虑到现在各种币都在高歌猛进,奋力暴涨,我实在是没有当 LP 的勇气,生怕被无常损失给收拾了,所以只拿了点大饼进去白嫖。当时也有注意到 MDEX 引入了曾经风靡各大 CEX 的交易挖矿,但是白嫖的想法太强烈,也就没有在意,直到前两天看到了神鱼的微博:

这个类似闪电贷的玩法勾起了我的兴趣,有赚就成交,没赚就返回,简直就是印钞机啊!百无聊赖的周日夜里,我决定写出我的第一个 Solidity 应用——把这个套利合约实现出来。

阅读全文 »

Capturetheether 题解(Miscellaneous)

发表于 2020-12-03 | 分类于 Coding

Assume ownership

目标合约

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pragma solidity ^0.4.21;

contract AssumeOwnershipChallenge {
address owner;
bool public isComplete;

function AssumeOwmershipChallenge() public {
owner = msg.sender;
}

function authenticate() public {
require(msg.sender == owner);

isComplete = true;
}
}
阅读全文 »

Capturetheether 题解(Accounts)

发表于 2020-12-03 | 分类于 Coding

Fuzzy identity

目标合约

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
pragma solidity ^0.4.21;

interface IName {
function name() external view returns (bytes32);
}

contract FuzzyIdentityChallenge {
bool public isComplete;

function authenticate() public {
require(isSmarx(msg.sender));
require(isBadCode(msg.sender));

isComplete = true;
}

function isSmarx(address addr) internal view returns (bool) {
return IName(addr).name() == bytes32("smarx");
}

function isBadCode(address _addr) internal pure returns (bool) {
bytes20 addr = bytes20(_addr);
bytes20 id = hex"000000000000000000000000000000000badc0de";
bytes20 mask = hex"000000000000000000000000000000000fffffff";

for (uint256 i = 0; i < 34; i++) {
if (addr & mask == id) {
return true;
}
mask <<= 4;
id <<= 4;
}

return false;
}
}
阅读全文 »

Capturetheether 题解(Math)

发表于 2020-12-01 | 分类于 Coding

Token sale

目标合约

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
pragma solidity ^0.4.21;

contract TokenSaleChallenge {
mapping(address => uint256) public balanceOf;
uint256 constant PRICE_PER_TOKEN = 1 ether;

function TokenSaleChallenge(address _player) public payable {
require(msg.value == 1 ether);
}

function isComplete() public view returns (bool) {
return address(this).balance < 1 ether;
}

function buy(uint256 numTokens) public payable {
require(msg.value == numTokens * PRICE_PER_TOKEN);

balanceOf[msg.sender] += numTokens;
}

function sell(uint256 numTokens) public {
require(balanceOf[msg.sender] >= numTokens);

balanceOf[msg.sender] -= numTokens;
msg.sender.transfer(numTokens * PRICE_PER_TOKEN);
}
}
阅读全文 »

Capturetheether 题解(Lotteries)

发表于 2020-12-01 | 分类于 Coding

在以太坊官网发现了这个 wargame,项目已经比较老了(solidity 版本为 0.4.21)。做完之后发现题目质量是相当高的,比起 Ethernaut 更综合也更有趣~

阅读全文 »

Ethernaut 题解(11-21)

发表于 2020-11-15 | 分类于 Coding

11. Elevator

通关条件

将目标合约的 top 字段修改为 true

目标合约

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pragma solidity ^0.5.0;

interface Building {
function isLastFloor(uint) external returns (bool);
}

contract Elevator {
bool public top;
uint public floor;

function goTo(uint _floor) public {
Building building = Building(msg.sender);

if (! building.isLastFloor(_floor)) {
floor = _floor;
top = building.isLastFloor(floor);
}
}
}
阅读全文 »

Ethernaut 题解(0-10)

发表于 2020-11-15 | 分类于 Coding

无意中看到 Openzeppelin 的这个 Solidity 题库,花了两天时间做完,稍作记录。

-1. 写在前面

  1. Ethernaut 用的是 Ropsten 测试网,这里推荐 Dimensions.network 的水龙头,目前一次给 5 ETH,比 Metamask 的水龙头(一次 1 ETH)给的多一些。
  2. Ethernaut 的题目 import 的 library 许多路径都过时了,可以到这里找回对应 solidity 0.5 的版本。

补充:目前 Ethernaut 已经迁移到 Rinkeby 测试网,但是 Ropsten 测试网的版本还是可以在这里访问到。

阅读全文 »

无 SDK 实现支付宝分享

发表于 2016-01-27 | 分类于 Coding

这两天试着为 MonkeyKing 添加了分享到支付宝好友的功能,自己也小小地体验了一次“逆向工程”,在此小记,以为备忘。

MonkeyKing 的目的是帮助 iOS 开发者在不集成 SDK 的情况下实现社交分享功能。要为它添加 分享到支付宝好友 的功能就需要知道支付宝官方 SDK 做了些什么,并自己使用代码来进行相应的操作。很遗憾支付宝的 SDK 并不是开源的, 所以我们就需要一些特殊手段来一探究竟。

阅读全文 »

Lanford33

8 日志
1 分类
5 标签
© 2021 Lanford33
由 Hexo 强力驱动
|
主题 — NexT.Mist v6.0.4