Cat20协议的第一个代币在今天凌晨打完,各路科学家都是神仙打架,简单梳理了一下,大致有几种科技:
- 屏蔽merge省gas
这个问题是在打完几笔之后,发现有几笔交易的费用很高,看了一些群,大家都发现这样的问题,后来看了下日志,发现有merge的操作,罪魁祸首就是它,通过阅读官方的白皮书,有提到代币merge是为了方便管理utxo,并且随时可以做merge,那就说明mint阶段的merge是完全可以移除的,于是对merge代码进行了修改,将下方
if (tokenContracts.length > 1) {
改为if (tokenContracts.length > 9999) {
即可,这就意外着不会触发merge过程了,其实更粗暴的方式是把mint函数中的merge函数调用删除。
async merge(metadata, address) {
const res = await (0, common_1.getTokens)(this.configService, this.spendService, metadata, address);
if (res !== null) {
const { contracts: tokenContracts } = res;
if (tokenContracts.length > 1) {
const cachedTxs = new Map();
- 修改output minter数量省gas
默认一笔交易产生2个output minter,也就是说,默认打的情况下,minter utxo会呈现2^n指数级增长,到后面可用的utxo越来越多,其实就没必要再生成minter了,修改output的输出为1甚至0(断子绝孙打法),可以稍微省一点gas,百分之几,哈哈哈。
不过我很希望下次哪个大哥把这个参数改成999,你一次mint就能生成999个可用minter了,为社区做贡献,哈哈修改了项目目录下的这个js文件内容packages\cli\dist\commands\mint\mint.command.js
const mintTxIdOrErr = await (0, ft_open_minter_1.openMint)(this.configService, this.walletService, this.spendService, feeRate, feeUtxos, token, 2, minter, amount);
将上方的数值2替换为0或1,就能实现稍省gas的功能
- 修改收件人地址,制造垃圾utxo? 昨天看到了说dotSwap平台打cat,制造了几十万的minter utxo垃圾,有可能是他们代打平台式托管代打的方式,造成了这个错误。通过阅读代码,发现可以通过修改输出的minter utxo的参数,例如将331sats修改为1sats,即可达到攻击的目的。以上只是猜测,实际流程我没去跑,没有印证修改sats是否能制造utxo垃圾。
使用send命令,填写正确参数即可转账,转账程序在转账之前,会自动对token进行merge,无需担心之前mint没开merge,转账转不了的情况。
命令格式:
sudo yarn cli send -i $token $receiver $amount --fee-rate $feeRate
示例:
send -i 45ee725c2c5993b3e4d308842d87e973bf1951f5f7a804b21e4dd964ecd12d6b_0 bc1pxxx 250 --fee-rate 40
$token
:代币合约地址,例如我们这次打的cat,其合约为:45ee725c2c5993b3e4d308842d87e973bf1951f5f7a804b21e4dd964ecd12d6b_0
$receiver
:接收方的taproot地址,这里建议使用taproot格式,钱包地址的m/44和m/86不用管,不影响转账结果,只需要保证地址格式正确即可$amount
:要发送的数量,小数或者整数都可以,如果数量比较大,例如400,建议拆分成几次发送,例如每次发200,因为转账过程也是需要等待merge结果的,干脆分为几次发送,不影响结果$feeRate
:交易gas费,使用下文的脚本,可自动获取链上当前gas,并使用当前gas交易,还可以自定义gas的倍率
查看代码,发现是由于获取可用utxo的服务进程,没有获取到可用的utxo,有两个原因:
- 节点索引未同步完全 这种情况只能等待节点同步完成,我没有去深究。
- 钱包utxo有且为1
使用任意钱包(自转也行),向本钱包再转一笔FB即可,例如:0.5FB,够归集的费用就行了。需要注意的是,得等到转账确认之后,再去尝试cat代币的转账 完成上述步骤后,即可愉快的转账了
很多小伙伴估计都遇到了节点服务器爆硬盘(64G大内存,都给我爆了)的窘境,本人昨天就是这样,导致后半场只能观火!!! 现在我只有助记词,怎么进行转账啊? 当前只有一种方式,那就是重新部署环境,等待节点同步完成,导入助记词,进行转账,不会这些操作的老哥,只能等待后续第三方服务支持转账功能了。或者找代转的老哥,担保啥的
流程如下:
{
"accountPath": "m/86'/0'/0'/0/0",
"name": "cat-coffee",
"mnemonic": "found this helpful you could treat me to a cup of coffee"
}
accountPath
:最新版的格式为:m/86'/0'/0'/0/0
,如果你使用的是老版项目创建的钱包,需将此处改为:m/44'/0'/0'/0/0
name
:钱包名称,改成你想要的名字即可,注意使用英文mnemonic
:助记词,你新建的外部钱包地址,或者unisat地址
导入助记词之后,并不意味着钱包就可以使用了,还需要使用export命令挂载钱包,操作如下:
执行:sudo yarn cli wallet export --create true
上述命令适用于首次导入助记词的钱包,如果你是修改了助记词,则无需创建钱包缓存,使用下述命令即可:
执行:sudo yarn cli wallet export
此流程参考1.正常转账教程
原因是服务器重启后,比特币核心节点的服务未开启,我们把他打开就行了 流程:
- 进入到
packages/tracker
目录下,先停止docker容器,输入命令docker stop tracker
- 然后启动比特币节点服务,输入命令
docker-compose up -d
,部分linux可能需要去除docker-compose
中间的-
,命令才有效 - 最后再启动docker容器,输入命令
docker start tracker
- 等待节点同步完成即可
- 将
./shell
文件夹,拷贝到packages/cli
目录下; - 运行脚本之前需要给脚本添加执行权限:
chmod +x ./shell/demo.sh
; - 在命令行cd到
packages/cli
目录,输入./shell/demo.sh
即可运行脚本. 注意: 需要多开的小伙伴,可以自行研究,并且autoGas.sh
脚本肯定能帮上大忙
- 开启新的窗口,进入到
packages/cli
目录下,输入./shell/autoGas.sh
运行获取链上实时gas脚本; - 再开启新窗口,进入到
packages/cli
目录下,输入./shell/demo.sh
,运行一键脚本; - 想多开,复制
demo.sh
到同级目录,修改文件名,例如demoNew.sh
,输入./shell/demoNew.sh
,即可运行第二个mint环境; - 继续多开,重复上述操作即可。
注意通过修改
./shell/common.sh
脚本中的变量,调整mint和转账的最大gas、gas倍率以及是否开启转账的最小gas限制。
有任何疑问欢迎联系我:https://x.com/jujubemelon
请你喝杯咖啡:
BTC:bc1p2jq6h7syt03hvm4c3mcxhpa4j6wtxf96h8jv4gakngfvamm2trcqyd58dw
ETH:0x8d92d168ac7f66c97316ea02138870b2393c403f
SOL:ykdmHZi5gYybcj8BaaartqYkfghuHTiDkDsiVhikgfd
我要和你深入交流,weChat: