实现交易所以太坊充值功能

用户充币 -- >  钱进入分配地址 --> 分配地址转入主钱包 -->  用户提币 --> 从主钱包直接转入用户提币地址

(如果采用冷热钱包配合,只需将百分之二十资金留在热钱包便可供日常提币) 具体的架构设计应根据业务来判断,有些钱包的做法是 用户充的币留在原钱包里

转账进主钱包的时候 以太币可以 采用 (用户转入金额除开手续费全部转入中心钱包),但是更推荐的做法是 用户第一次注册时 为用户钱包转入一定的手续费

步骤:

1. 安装go-ethereum,给每个用户生成一个以太坊钱包地址;

2. 用户会把ETH充值到这个钱包;

3. 监听以太坊钱包的转账记录,并同步到用户账号余额;

通过etherscan的api监听全部transaction,接口是

url = "http://api.etherscan.io/api?module=account&action=txlist&address=#{address}&startblock=0&endblock=99999999&sort=desc&apikey=#{API_KEY}"

然后通过判断返回每个transaction的to字段是否等于address,来判断这条记录是否为转入记录,confirmations来判断确认数,通常大于12个确认数就可以了,isError来判断这条记录是否转账异常,再判断数据库是否已经存在这条记录,如果不存在,就存进数据库,并在用户余额上加上这个数字。

4. 监听钱包余额,把充值进来的币集中转入热钱包;

区别在于交易所是如何把充值进来的币集中到一个热钱包里,有的交易所会按照上一篇所说的那样,跑定时任务去转账,另一种比较有意思的就是用智能合约去转账,也就是服务器生成钱包的那一步,其实是部署了一个智能合约,合约里写好逻辑,币转进来就会被合约自动转账给热钱包,目前我实现的方法是第一种。

第一版实现,因为服务器资源有限,业务也是刚起步,就没浪费资源去自己运行以太坊节点,使用了infura.io的json rpc节点,好处是不需要担心维护以太坊节点,暂时可以相信这个节点是不会坏掉的,坏处就是以太坊json rpc的节点是不支持根据钱包地址查询全部转账记录的,所以第一版用了比较hack的手段监听余额数字。

同样是定时脚本,监听余额,发现有余额大于0的钱包地址,就把钱包里的钱转入热钱包,并在对应用户的余额上加对应的数字。这样做会出问题,一开始的想法是,每次监听都把钱包里的余额全都转到热钱包,这样保证钱包里的余额永远是0,每次充值都是加上钱包里的余额就好,这样做的前提是,要把gasLimit设置成21000,转账amount为钱包里的余额减去gas费用,但是这笔转账很容易因为gas不足就失败了,为了保证每笔转账能尽可能成功,要把gasLimit设置的大一点,这样做就会导致没用完的gas会返还给钱包,钱包里的余额就不再是0,所以又加了一段hack的代码,每次监听都会把余额的数字缓存起来,并且每次监听,如果监听到的余额小于这个缓存,就缓存这个小的数字,而逻辑上钱包里的余额是,以太坊钱包真实余额减去这个缓存的数字,这样做一看就漏洞百出,但是在充值频率正常的情况下,是work了。进度原因,用这种心惊肉跳的逻辑运行了很长一段时间。

第二版,就是用etherscan的api,拿到钱包地址的转账记录,提出转入的记录,写进数据库,不会同步进行链上转账,每天跑一次集中到热钱包的脚本就够了,这样的好处是不会出现充值出错的问题,逻辑也比较清晰,不需要hack,可能的坏处就是,etherscan挂掉了,我们的服务也就不能用了,可能etherscan坏掉的概率和infura坏掉的概率差不多吧。我想最好的解决办法就是自己运行一个以太坊节点吧,做etherscan相同的事儿,就能自己监控记录了,这就不会让自己的服务依赖别人的东西了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,639评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,093评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,079评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,329评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,343评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,047评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,645评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,565评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,201评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,338评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,014评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,701评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,194评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,685评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,345评论 2 358