工作量证明涉及解决一个复杂的难题,其中包括你想要包含在区块中的交易,以表明你已经在工作中投入了一定的算力。当一个难题解决后,区块链上的其他成员会认真检查该解决方案。第一个解决计算难题的人会将计算结果提交给区块链,以确定答案是否匹配。如果答案确实相同,则解决难题的过程将从具有新交易的新区块开始。现在解决的区块由其他人通过在下一个区块中包括(对它的引用)来确认。
在这种方法中,一个人需要解决的难题的难度取决于他投入了多少加密货币,而不是通过使用算力获得验证区块的权利。这与买彩票有些类似:买得越多,赢的机会就越大。但有一点不同的是:如果你不赢,你不会输掉你的赌注,尽管它可能会被锁定一段时间。在这种情况下,拥有大量代币的人有兴趣保持区块链网络的可靠性,因为一个不可靠的网络会使他们的代币变得一文不值。因此他们只会确认有效的交易。在某些版本的PoS中,如果网络的其它部分不确认你的区块,实际上你会丢失你的筹码(代币)。
TBC采用POW+POS混合共识机制,它的分配机制堪称经典,十分符合玩家的工作量证明以及资产所有者的权益证明。通过工作量证明(PoW)产生新区块后,出块者获得60%的奖励,随后进入POS共识的投票阶段,允许Holder自由参与投票并获得系统分配的30%奖励,剩余10%进入社区金库,由社区决定使用。
这种混合的共识方法为所有矿工(工作量证明法支持者)和代币持有人(权益证明法支持者)提供了赢得区块的平等机会。矿工可以通过增加工作量来提升赢得区块的机会,代币持有者也可以通过持有更多代币来增加他们(赢得区块)的机会。 每个群体都有50%的机会获胜。
智能合约是一种特殊协议,旨在提供、验证及执行合约,它允许我们在不需要第三方的情况下,执行可追溯、不可逆转和安全的交易。智能合约包含了有关交易的所有信息,只有在满足要求后才会执行结果操作。智能合约和传统纸质合约的区别在于智能合约是由计算机生成的。因此,代码本身解释了参与方的相关义务。事实上,智能合约的参与方通常是互联网上的陌生人,受制于有约束力的数字化协议。本质上,智能合约是一个数字合约,除非满足要求,否则不会产生结果。
Copy 客户端授权*/ @Override
@Transactional
public TokenDto clientAuth(String username, String token, Game game)
{ Long gameId = game.getId();
if (!cacheService.match(CacheNames.CLIENT_TOKEN, username + gameId.toString(), token)) {
throwBadRequest(NO_AUTH);
}
DomainUser user = userService.findByName(username, true); gameLogonRepository.offLine(user.getId(), gameId); GameLogon logon = new GameLogon(); logon.setUserId(user.getId()); logon.setAccountId(user.getAccounts().iterator().next().getId()); logon.setGameId(gameId);
logon.setToken(DomainUtils.l币咚合约hars(username, 4) + DomainUtils.firstChars(token, 6));
logon.setCreateTime(new Date()); logon.setUpdateTime(logon.getCreateTime()); gameLogonRepository.save(logon);
TokenDto detail = new TokenDto(); detail.setUsername(username); detail.setToken(logon.getToken()); return detail;
}
/** * Initiate Payment after Authorization
*/ @Override
@Transactional
public TransResult createTrans(UserBrief user, Long gameId, TransDto request) {
Map<String, Account> accs = accountService.findAccountsIn(ImmutableList.of(request.getUsername(), request.getTo()));
Account from = accs.get(request.getUsername());
BigDecimal quantity = DomainUtils.typedMulti(request.getQuantity(), CoinType.GCN); if (from.getAmount().compareTo(quantity) < 0) throwBadRequest(LOW_AVAILABLE);
GameLogon fgl = gameLogonRepository.findByGameIdAndAccountIdAndTokenAndLogin(gameId, from.getId(), request.getToken(), true);
AccountTransaction trans = new AccountTransaction(); trans.setTransactionType(TransactionType.P2P);
if (DomainUtils.isNull(fgl)) {
if (!request.getUsername().equalsIgnoreCase(user.getUsername())) { logger.error(String.format("game#%d#trans#%s fail from#%s", gameId,
request.getTransNum(), request.getUsername()));
throwBadRequest(NO_PAYMENT_AUTH);
}
trans.setUserId(user.getId());
trans.setTransactionType(TransactionType.V2P); } else {
gameLogonRepository.outcome(fgl.getId(), quantity); trans.setUserId(fgl.getUserId());
}
Account to = accs.get(request.getTo()); GameLogon tgl =
gameLogonRepository.findByGameIdAndAccountIdAndTokenAndLogin(gameId, to.getId(), request.getToToken(), true);
if (DomainUtils.isNull(tgl)) {
if (!request.getTo().equalsIgnoreCase(user.getUsername())) { logger.error(String.format("game#%d#trans#%s fail to#%s", gameId,
request.getTransNum(), request.getTo()));
throwBadRequest(NO_PAYMENT_AUTH);
}
trans.setToUserId(user.getId());
trans.setTransactionType(TransactionType.P2V); repository.income(gameId, quantity);
} else {
gameLogonRepository.income(tgl.getId(), quantity); trans.setToUserId(tgl.getUserId()); repository.trade(gameId, quantity);
}
trans.setPreAmount(from.getAmount());
trans.setToPreAmount(to.getAmount()); trans.setQuantity(quantity); trans.setTransNum(request.getTransNum()); trans.setMemo(request.getMemo()); accountService.saveTransaction(trans);
logger.info(String.format("%d, from %s,%d, to %s", from.getId(), from.getAmount(), to.getId(), to.getAmount()));
accountService.outcome(from.getId(), quantity); accountService.income(to.getId(), quantity);
TransResult tr = new TransResult(from.getAmount().subtract(quantity), to.getAmount().add(quantity));
logger.info(String.format("%d, from %s,%d, to %s", from.getId(), tr.getAmount().toString(), to.getId(), tr.getToAmount().toString()));
return tr;
TBC平台使用智能合约作为其核心逻辑,,它是一种在区块链上运行的计算机程序,并根据预定义的规则和条件自动执行。智能合约可以用于许多应用场当智能合约被部署到区块链上后,可以自动执行预设的业务逻辑,并对数据进行管理。
交易平台最核心的要求是确保数据存储、管理及交易的安全。TBC依托强大的技术团队,从底层布局,采用软硬件结合的方式,打造金融级数据安全加密解决方案,确保所有链上数据的的安全。计算机世界里,凡是软件都有漏洞,单靠软件保护存储安全是不可靠的。我们将采用软件和硬件结合的方式,以金融级安全措施隔绝黑客。
主要用于实现对主机应用层数据加解密、消息来源正确性验证、密钥管理等,是金融数据安全保护级别的一种有效物理工具,具有完善的密钥管理体系,其特点:能提供由全硬件噪声源产生的真随机密钥(其它交易所提供的均为伪随机密钥);能有效防止通信信道上的主动攻击行为;以物理方式封闭敏感信息使其变为不可读信息;硬件芯片在遭遇拆解时具有自我销毁功能;符合 FIPS 140-2 Level3 国际标准,具有高安全性。
专用 U 盾与密码机等设备实现物理隔离用户核心信息和私钥, 硬件芯片在拆解时均具有自我销毁功能,没有用户的安全设备,即使窃取硬件也无法从芯片中获得私钥,从而确保用户资产安全,杜绝可能的监守自盗。