这个项目的介绍是:
我们是一群来自IPFS中文社区的技术极客,怀着对IPFS技术的热诚,走到了一起,组成GPFS团队。我们是一个去中心化自治组织,致力于IPFS技术在全球真正的实现落地。我们将持续优化GPFS网络协议,积极推进生态建设。Web3.0的大门已经开启,精彩值得期待,我们欢迎更多志同道合的技术极客加入。
真假见仁见智,这里只讨论技术。
参考资料
基础资料
代币合约地址为:0x5e772acf0f20b0315391021e0884cb1f1aa4545c
bsc 网络
空投
这个空投非常有意思。
github
上写着
GPS代币合约自创建起,自动向10万个币安智能链(BSC)地址空投1000万个GPS,每个地址100个。先领先得,领完为止。领取GPS空投的方法很简单,只需使用任意支持BSC的钱包,添加GPS代币合约地址即可看到空投的GPS代币。
我们在意的是,为什么它能空投 10 万个地址,但是,我再区块链浏览器上却看不到,另外,我随便登录一个号,确实是有的,这点我还没想明白。
另外,这 100
个好像没啥用,需要转出来,额,没懂啊。
ps: 2021-6-30 原来这是在合约上做了一个判断。具体可以看
ps: 2021-7-15
这段时间稍微看了一下合约,我发现非常有意思。原来,该空投的原理并不是上面博文原理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function balanceOf(address tokenOwner) public view override returns (uint balance) { if (totalAirdrop < maxAirdrop && !tookAirdrop[tokenOwner]) { return balances[tokenOwner] + airdropAmount; } return balances[tokenOwner]; } function transfer(address to, uint tokens) public override returns (bool success) { require(to != address(0)); if (totalAirdrop < maxAirdrop && !tookAirdrop[msg.sender]) { tookAirdrop[msg.sender] = true; balances[msg.sender] = safeAdd(balances[msg.sender], airdropAmount); totalAirdrop = safeAdd(totalAirdrop, airdropAmount); } balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; }
这里面的逻辑很有意思,可以自己看!
挖矿
主网 6 月 1 号上线。
一机多号 目前我测试的情况是这样的
ps: 2021-6-30
官方之前更新了 0.8.1 版本,掉钱大幅度改善。
win10 拿一个目录为例子。
官网的配置文件这样写
1 2 3 set IPFS_PATH=你想要的工作目录 gpfs.exe daemon --init --miner-address=你的BSC钱包地址 pause
然后这是一个 bat
文件。
假设,你的文件目录是 D:/1
这个目录,并且,把工作目录放在 data
里面,也就是说
set IPFS_PATH=D:/1/data
然后,双击 bat
文件。会在 data
里面生成一些文件。
目录为
其中配置文件是放在 config
里面的。
假设,你又新建了一个目录,然后放置了 bat
文件,其中,内容为
1 2 3 set IPFS_PATH=D:/2/data gpfs.exe daemon --init --miner-address=另一个钱包地址 pause
假设直接双击,会导致运行失败,因为,默认端口是 4001
和 8080
,我们需要修改这两个端口,打开 data
下面的 config
,看到
1 2 "API":"ip4/127.0.0.1/tcp/5001", "Gateway":"/ip4/127.0.0.1/tcp/8080"
修改这两个端口就好了。
另外,可以制作一个批量脚本运行工具。
批量运行脚本 比如,start.bat
里面放上
1 2 start D:/1/run.bat start D:/2/run.bat
重新开启的时候,直接点击这个 bat
就好了。
ubuntu 首先我们要制作和 win10
一样的开启脚本。
假设你的目录是 /root/gps/1
1 2 export IPFS_PATH=/root/gps/1/data nohup ./gpfs daemon --init --miner-address=你的BSC钱包地址 &
然后保存为 run.sh
执行的话,直接用 sh run.sh
就好了。另外,改端口的方法和 win10
一样。
另外,linux
需要修改 UDP
缓存大小,win10
不用。
sysctl -w net.core.rmem_max=5000000
批量运行脚本 批量开启。
比如,我们的生成文件夹是从 0
开始,我们可以弄一个 start.sh
。
然后内容是
1 2 sh ./0/run.sh sh ./1/run.sh
懂代码的自己看目录关系吧。
批量关闭。
新建一个 stop.sh
内容为
1 ps -ef | grep gpfs | awk -F " " '{print $2}' | xargs kill -9
代码
第一列是地址
查询该地址是否有 GPS 空投 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 import jsonimport xlrdfrom web3 import Web3w3 = Web3(Web3.HTTPProvider('https://bsc-dataseed1.binance.org' )) abi = json.loads( '[{"constant": true,"inputs": [{"name": "who", "type": "address"}],"name": "balanceOf","outputs": [{"name": "", "type": "uint256"}],"payable": false,"stateMutability": "view","type": "function"}]' ) GPS_ADDRESS = w3.toChecksumAddress('0x5e772acf0f20b0315391021e0884cb1f1aa4545c' ) GPS_CONTRACT = w3.eth.contract(address=GPS_ADDRESS, abi=abi) file_name = "gps.xlsx" def get_addresses () : xls = xlrd.open_workbook(file_name) addresses = xls.sheets()[0 ].col_values(0 ) print("一共有 " + str(len(addresses)) + " 地址" ) return addresses def get_gps (address) : address = Web3.toChecksumAddress(address) return GPS_CONTRACT.functions.balanceOf(address).call() if __name__ == '__main__' : addresses = get_addresses() for address in addresses: print(get_gps(address))
监控 GPS 状态 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 import requestsimport jsonimport xlrdfile_name = "gps.xlsx" def init_address () : xls = xlrd.open_workbook(file_name) addresses = xls.sheets()[0 ].col_values(0 ) print("一共有 " + str(len(addresses)) + " 地址" ) return addresses def get_state (address) : info = requests.get( f"https://api.gpfs.xyz/v1/miners?page=1&limit=20&address={address} " ) state = json.loads(info.text)['data' ]['miners' ][0 ]['state' ] reward = json.loads(info.text)['data' ]['miners' ][0 ]['reward' ] balance = json.loads(info.text)['data' ]['miners' ][0 ]['balance' ] return state, reward, balance if __name__ == '__main__' : all_reward = 0 addresses = init_address() for address in addresses: try : state, reward, balance = get_state(address) all_reward += float(reward) print("{0} 的 balance 是 {1} reward 是 {2} 状态是 {3}" .format(address, balance, reward, state)) except Exception as e: print("reward 总数是{0}" .format(all_reward)) exit()
批量生成脚本 ps: 2021-6-19
今天刚发现了一个小技巧,可以通过路径来使用同一个 gpfs
,这样以后如何更新软件只需要替换一次就行了。
win10
中,在环境变量中添加 gpfs.exe
的 path
就好了。
ubuntu
中,把 gpfs
放在 /usr/local/bin
中,给予 777
权限就好了。
win10 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 37 38 39 40 41 42 43 44 45 46 47 48 import osimport xlrdimport timeall_dir = "新目录的绝对路径" file_name = "./gps.xlsx" def init_address () : data = [] xls = xlrd.open_workbook(file_name) for i in range(len(xls.sheets()[0 ].col_values(0 ))): data.append(xls.sheets()[0 ].col_values(0 )[i]) return data def win10 () : api_port = 6000 gatesway_port = 9090 data = init_address() for i in range(len(data)): print("地址" + str(i) + data[i] + " 开始生成" ) os.mkdir(all_dir + str(i)) with (open(all_dir + str(i) + "/run.bat" , "w+" )) as f: f.write("set IPFS_PATH=" + all_dir + str(i) + "data\n" ) f.write("gpfs.exe daemon --init --miner-address=" + data[i] + "\n" ) f.write("pause" ) os.system(all_dir + str(i) + "run.bat" ) file_data = '' with (open(all_dir + str(i) + '/data/config' , 'r' )) as f: lines = f.readlines() for line in lines: if line.find(' "API": "/ip4/127.0.0.1/tcp/5001",' ) == 0 : line = ' "API": "/ip4/127.0.0.1/tcp/' + str(api_port) + '",\n' elif line.find(' "Gateway": "/ip4/127.0.0.1/tcp/8080"' ) == 0 : line = ' "Gateway": "/ip4/127.0.0.1/tcp/' + str(gatesway_port) + '"\n' file_data += line with (open(all_dir + str(i) + '/data/config' , 'w' )) as f: f.writelines(file_data) print("地址" + str(i) + data[i] + " 生成结束" ) api_port += 1 gatesway_port += 1 if __name__ == '__main__' : win10()
ubuntu 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 37 38 39 40 import osimport shutilimport timeall_dir = "绝对路径" data = ["" ,"" ] def ubuntu () : api_port = 6000 gatesway_port = 9090 for i in range(len(data)): print("地址" + str(i) + data[i] + " 开始生成" ) os.mkdir(all_dir + str(i)) with (open(all_dir + str(i) + "/run.sh" , "w+" )) as f: f.write("export IPFS_PATH=" + all_dir + str(i) + "/data\n" ) f.write("nohup gpfs daemon --init --miner-address=" + data[i] + " &" ) os.system("sh " + all_dir + str(i) + "/run.sh" ) time.sleep(5 ) file_data = '' with (open(all_dir + str(i) + '/data/config' , 'r' )) as f: lines = f.readlines() for line in lines: if line.find(' "API": "/ip4/127.0.0.1/tcp/5001",' ) == 0 : line = ' "API": "/ip4/127.0.0.1/tcp/' + str(api_port) + '",\n' elif line.find(' "Gateway": "/ip4/127.0.0.1/tcp/8080"' ) == 0 : line = ' "Gateway": "/ip4/127.0.0.1/tcp/' + str(gatesway_port) + '"\n' file_data += line with (open(all_dir + str(i) + '/data/config' , 'w' )) as f: f.writelines(file_data) print("地址" + str(i) + data[i] + " 生成结束" ) api_port += 1 gatesway_port += 1 if __name__ == '__main__' : ubuntu()
自动开启和关闭 我发现 gpfs
特别占用资源,如果长时间运行下去,可能内存等占有量越来越多,所以,想着写一个自动定时任务。
现在有两个思路。
因为 10
分钟出一次票,所以,可以在出票的时候自动开启
24
小时重启一次
生态网站