细心的用户可能发现Bycoin钱包在高级设置下面增加了几个新的功能——钱包余额刷新工具,UTXO合并工具,如下图:
这些小工具可以一键解决用户使用过程中的一些小问题,那么这些小工具有什么作用呢?
钱包余额刷新工具
钱包余额刷新工具可以强制节点再次更新用户账户的余额信息,解决合约转账或者余额未及时同步的问题。
外部账户和合约账户
我们知道以太坊中有两类账户——外部账户和合约账户
外部账户:该类账户被公钥-私钥对控制,外部账户的地址是由公钥决定的
合约账户:该类账户被存储在账户中的代码控制,合约账户的地址是在创建合约时确定的
两种账户都可以实现对以太币的管理,包括持有以太币、查询余额、发送交易等。
交易和内部交易
一般用户转账的时候,都是使用外部账户对代币合约发起调用,调用转账的方法,最终发起转账的请求到以太坊节点。
摩根大通投资策略主席:不管比特币如何扩张,如何流行都不能让人感到满意:金色财经报道,金融巨头摩根大通投资策略主席Michael Cembalest在最近的一次采访中表示,他对比特币和加密货币的世界并不疯狂,暗示尽管比特币如何扩张,如何流行,但这种货币不会让所有人都感到满意。Cembalest 表示所表达的观点是他自己的观点,而不是摩根大通的观点。不喜欢世界排名第一的数字货币,原因有两个。首先是因为它的波动性,他说这阻止了比特币“进入与价值投资相一致的范围”。另一个原因是因为比特币并没有像许多分析师让我们相信的那样证明自己是对冲通胀的工具。(livebitcoinnews)[2022/2/14 9:49:52]
那么什么是内部交易,内部交易就是合约之间的调用,通过合约状态的改变从而达成转账的目的
针对第一种普通转账,Bycoin可以很轻易检测到用户余额的改变,而内部交易较难检测到其内部的行为。所以通过钱包余额刷新工具来更新内部交易产生的交易而导致的余额变化。
钱包余额刷新工具做了什么?
钱包余额刷新工具会请求以太坊的节点,来重新查询用户的地址,获取内部交易产生的余额变动,并将查询结果记录到数据库中,从而将用户余额正确更新.
func(s*Service)SyncBalance(c*gin.Context)error{address,err:=formatETHAddress(c.Query("address"))iferr!=nil{returncommonTypes.ErrAddressFormat}iferr:=s.DB.Slave().Model(orm.Address{}).Where("address=?",address).First(&orm.Address{}).Error;err!=nil{returncommonTypes.ErrNotFoundAddress}ormAssets:=make(orm.Asset,0)iferr:=s.DB.Slave().Model(orm.Asset{}).Find(&ormAssets).Error;err!=nil{returncommonTypes.ErrAssetID}blockHeight,err:=s.node.GetBlockCount()iferr!=nil{returnerr}for_,asset:=rangeormAssets{ifasset.Asset==ETH{iferr:=ethereum.UpdateBalance(s.DB.Master(),address,s.node,asset.Asset,asset.ID,int64(blockHeight));err!=nil{returnerr}}else{iferr:=ethereum.UpdateBalance(s.DB.Master(),address,s.node,asset.ContractAddress,asset.ID,int64(blockHeight));err!=nil{returnerr}}}returnnil}funcUpdateBalance(db*gorm.DB,addressstring,node*Node,assetstring,assetIDuint64,blockHeightint64)error{......//UPDATE}else{//ERC20balancebalanceBigInt,decimal,err:=node.GetERC20Balance(address,asset)iferr!=nil{returnerr}......}addressInfo:=orm.Address{Address:address}iferr:=db.Select("id").Where("address=?",address).Find(&addressInfo).Error;err!=nil{errors.Wrap(err,"errselectaddress")returnnil}balance:=&orm.Balance{AddressID:addressInfo.ID,AssetID:assetID,Balance:value,PendingBalance:pendingValue,LastUpdateBlock:uint64(blockHeight),}returnsaveBalance(db,balance。
币情观察室 | 我是如何从650赚到100个比特币的?:4月8日 19:00,金色盘面邀请实盘大V 币圈栋哥做客金色财经《币情观察室》直播间,将分享《我是如何从650赚到100个比特币的?》,敬请关注,扫描下图二维码即可观看直播![2020/4/8]
UTXO合并工具
很多朋友都遇到过UTXO太碎导致交易不成功的现象,Bycoin通过这款工具可以一键解决此类用户的问题。
什么是UTXO
UTXO是UnspentTransactionOutput的缩写,意思是未花费的输出,可以简单理解为还没有用掉的收款。UTXO核心设计思路是:它记录交易事件,而不记录最终状态。要计算某个用户有多少币,就要对其钱包里所有的UTXO求和,得到结果就是他的持币数量。
比原链和比特币一样,也是采用UTXO模型。
为什么需要UTXO合并
我们看到UTXO模型中,任何一笔交易的输入都是前一笔交易的输出,然后当你的UTXO数量非常多时,你的交易会有很多的输入,从而整体的交易体积会变大,因为区块的容量有限制,为了防止有人恶意使用大量小的UTXO构建一笔体积非常大交易,从而出现堵塞区块的出现,比原链限制了输入UTXO的个数最大为20个,当你UTXO太多时,可能会出现交易不成功的现象,那么我们需要将UTXO合并工具,通过发送交易给自己,将小额的UTXO合并成大的UTXO。
动态 | Cryptopia清算跟进:总资产为170万美元 清算人需向法院咨询如何支付欠款:据rnz消息,Cryptopia清算公司Grant Thornton需要就如何现款支付客户欠款向法庭寻求法律咨询,因为世界上还未有任何法律先例。来自Grant Thornton的清算人David Ruscoe和David Ruscoe发布报告称,Cryptopia目前欠款超过400万美元,而总资产为170万美元。本周,法院下达命令,允许他们使用该公司持有的比特币为清算提供资金。 据此前消息,Grant Thornton发布清算报告显示,Cryptopia欠69名无担保债权人债务超过210万美元,有担保债权人的债务超过140万美元。此外,该公司欠员工未付工资、假期工资以及无担保债务近60万美元,预计无担保债权人的数量将会增加。在今年1月份遭黑客入侵损失1600万美元后,Cryptopia目前已申请美国破产保护。[2019/6/1]
UTXO合并工具做了什么?
UTXO合并工具首先判断是否有合并的余额,以及是否需要合并
balance,err:=coin.CalcBalance(s.DB.Slave(),account,req.Asset,req.Confirmation)iferr!=nil{returnnil,err}ifbalance.Cmp(big.NewInt(0).SetUint64(totalAmount))<0{returnnil,errors.Wrap(types.ErrInsufficientBalance,fmt.Sprintf("balance%sless%d",balance.String(),totalAmount)。然后会寻找该账户关联的所有的UTXO
郭宇航谈区块链和数字货币项目如何规避政策风险:做到三个点:日前在“2018洪泰春分大会”上,谈及到区块链未来到底能做什么,星合资本董事长、点融创始人郭宇航,作为业内知名区块链专家,他表示:“区块链在金融、存证、版权、游戏、未来万物上链等方面容易落地,最终是要让全世界的机器走向共识。以及关于区块链和数字货币项目如何规避政策风险?郭宇航认为就三点,一是不要渉众,二是服务实体,三是拥抱监管。”[2018/3/22]
utxoFinder:=coin.NewUTXOFinderWithFindStrategy(s.DB.Slave(),ormCoin,account,builder.EstimateGas,builder.FindUTXOs)ifreq.SpendAll{optUTXOs,err=utxoFinder.PrepareAllUTXOs(req.Asset,req.Confirmation,s.Cfg.Coin.DesiredUtxoCount)iferr!=nil{returnnil,errors.Wrap(err,"prepareallutxos"。iflen(optUTXOs)==0{optUTXOs,_,err=utxoFinder.PrepareUTXOs(req.Asset,totalAmount,req.Confirmation,s.Cfg.Coin.DesiredUtxoCount)iferr!=nil{returnnil,errors.Wrap(err,"prepareUTXOs"。if!req.ForbidChainTx&&len(optUTXOs)>s.Cfg.Coin.ChainTxMinUTXONum&&(s.Cfg.Coin.ChainTxMergeGas==0||req.Asset==consensus.BTMAssetID.String()){chainUTXOs:=optUTXOsif!req.SpendAll{chainUTXOs,err=utxoFinder.PrepareChainUTXOs(req.Asset,totalAmount,req.Confirmation,s.Cfg.Coin.DesiredUtxoCount,s.Cfg.Coin.ChainTxMinUTXONum,s.Cfg.Coin.ChainTxMergeGas)iferr!=nil{returnnil,errors.Wrap(err,"preparechainutxos"。最后通过链式交易进行合并。
区块链试验引发暴风股价暴涨后 暴风首次回应如何避免炒币风险:据了解,播酷云负责人,暴风新影CEO崔天龙针对投机客可能存在的BFC炒作现象做出解释。崔天龙说道,“这种炒作我们肯定是很不愿意见到的。但是万一一旦发生了,我们还是有很多的手段来控制它。”他例举称,“比如说很简单的做法,我只需要在我的官网上,把BFC积分和我的产品的兑换进行价格绑定,基本上就对它的价值进行了锚定,会很大程度上限制BFC的炒作。”[2017/12/13]
chainTxs,utxos,err:=builder.BuildChain(s.TxDecoder,chainUTXOs,req.Asset,s.NetParams,s.Cfg.Coin.ChainTxMinUTXONum,s.Cfg.Coin.ChainTxMergeGas)iferr!=nil{returnnil,errors.New("buildtxchain"。for_,chainTx:=rangechainTxs{resp,err:=s.createBuildPaymentResp(account,chainTx.OptUtxos,chainTx.Fee,chainTx.Tx,chainTx.SigningInstructions,"")iferr!=nil{returnnil,err}result=append(result,resp。optUTXOs=utxos}fee:=builder.EstimateGas(len(optUTXOs),account.M(),account.N())resp,err:=s.buildPaymentWithUTXO(req,req.Asset,ormCoin,account,optUTXOs,fee,builder)iferr!=nil{returnnil,errors.Wrap(err,"buildpayment"。returnappend(result,resp),nil}
2月15日,去中心化服务平台Avalanche发推宣布,Avalanche-Ethereum桥已经恢复服务。中继节点Meter将密切监视桥运行状况,并在桥恢复稳定时根据需要动态调整服务.
1900/1/1 0:00:00据澎湃新闻消息,2月19日,国际货币基金组织发布了题为《数字时代公共货币和私人货币可共存》的文章。文章提出,央行不应仅做出二选一的抉择:要么发行央行数字货币,要么鼓励私人部门提供自己的数字货币.
1900/1/1 0:00:00以太坊今日势如破竹,主流加密分析师们都认为在年底前它将一直保持强势。和这种普遍共识相反,以太坊即将上线的1559改进提案EIP近日却在以太坊社区引发了不少争论.
1900/1/1 0:00:002月18日,开发人员、以太坊应用网络项目LUKSO创始人FabianVogelsteller发推称,在经历1.5年的律师、监管机构、编码、破解数学和几乎放弃之后,重启可逆ICO,筹集大约1800万美元的资金,与2014年以太坊相同.
1900/1/1 0:00:00矿业公司AurumCapitalVenturesUSA正在将其房东MarkusSchneider告上法庭,以取回其设备,并于周二在纽约北区提起法律诉讼.
1900/1/1 0:00:00基于2020年12月14日网络升级投票,关于生态基金用途(ConfluxNetworkEcosystemFundUsage)以及剩余未发放FC发放完毕的预计周期(TheremainingFCtokens)等方案的投票结果显示.
1900/1/1 0:00:00