⛓️区块链技术

POW+POS混合共识机制

POW共识机制:工作量证明

工作量证明涉及解决一个复杂的难题,其中包括你想要包含在区块中的交易,以表明你已经在工作中投入了一定的算力。当一个难题解决后,区块链上的其他成员会认真检查该解决方案。第一个解决计算难题的人会将计算结果提交给区块链,以确定答案是否匹配。如果答案确实相同,则解决难题的过程将从具有新交易的新区块开始。现在解决的区块由其他人通过在下一个区块中包括(对它的引用)来确认。

POS共识机制:权益证明

在这种方法中,一个人需要解决的难题的难度取决于他投入了多少加密货币,而不是通过使用算力获得验证区块的权利。这与买彩票有些类似:买得越多,赢的机会就越大。但有一点不同的是:如果你不赢,你不会输掉你的赌注,尽管它可能会被锁定一段时间。在这种情况下,拥有大量代币的人有兴趣保持区块链网络的可靠性,因为一个不可靠的网络会使他们的代币变得一文不值。因此他们只会确认有效的交易。在某些版本的PoS中,如果网络的其它部分不确认你的区块,实际上你会丢失你的筹码(代币)。

TBC采用POW+POS混合共识机制,它的分配机制堪称经典,十分符合玩家的工作量证明以及资产所有者的权益证明。通过工作量证明(PoW)产生新区块后,出块者获得60%的奖励,随后进入POS共识的投票阶段,允许Holder自由参与投票并获得系统分配的30%奖励,剩余10%进入社区金库,由社区决定使用。

这种混合的共识方法为所有矿工(工作量证明法支持者)和代币持有人(权益证明法支持者)提供了赢得区块的平等机会。矿工可以通过增加工作量来提升赢得区块的机会,代币持有者也可以通过持有更多代币来增加他们(赢得区块)的机会。 每个群体都有50%的机会获胜。

智能合约设计

智能合约是一种特殊协议,旨在提供、验证及执行合约,它允许我们在不需要第三方的情况下,执行可追溯、不可逆转和安全的交易。智能合约包含了有关交易的所有信息,只有在满足要求后才会执行结果操作。智能合约和传统纸质合约的区别在于智能合约是由计算机生成的。因此,代码本身解释了参与方的相关义务。事实上,智能合约的参与方通常是互联网上的陌生人,受制于有约束力的数字化协议。本质上,智能合约是一个数字合约,除非满足要求,否则不会产生结果。

TBC链游聚合发射生态平台采用智能合约自动执行,它的合约网络与各使用场景的授权开源如下所示:

客户端授权*/ @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智能合约逻辑包括以下部分:

  • 前端用户界面(前端逻辑):前端逻辑是用户与TBC平台进行交互的部分,它处理用户的输入、响应用户的行为并与智能合约进行交互。前端逻辑通常包括用户界面(如网页或移动应用)和用户交互逻辑(如输入验证、用户状态管理等)。

  • 智能合约设计:智能合约是TBC平台的核心部分,它执行合约逻辑并与区块链网络上的其他智能合约进行交互,使用Solidity等区块链编程语言编写的,这些语言是为了适应区块链网络的特性而设计的。

  • 区块链网络交互:TBC平台的合约逻辑需要与区块链网络进行交互,以获取数据、发送交易和调用其他智能合约,涉及到与区块链网络的API进行交互。

  • 数据存储:TBC平台的合约逻辑需要访问区块链上的数据,如状态变量、事件等,这涉及到使用区块链数据存储解决方案。。

  • 可扩展性和安全性:由于TBC平台需要在去中心化的环境中运行,它们需要在可扩展性和安全性方面进行权衡。这可能包括使用分布式系统设计、共识算法和密码学等技术。

TBC的智能合约是去中心化的,没有集中式的中央控制机构。它是由分布在网络中的多个节点共同维护和管理的,因此,它是一个非常透明、公平和民主的系统。

数据加密

交易平台最核心的要求是确保数据存储、管理及交易的安全。TBC依托强大的技术团队,从底层布局,采用软硬件结合的方式,打造金融级数据安全加密解决方案,确保所有链上数据的的安全。计算机世界里,凡是软件都有漏洞,单靠软件保护存储安全是不可靠的。我们将采用软件和硬件结合的方式,以金融级安全措施隔绝黑客。

定制 CPU:从最底层计算机硬件开始布局

独立设计专用指令集,因此主机里运行的程序必须是使用我们自创的编译器编译方可运行,黑客使用通用编译器编译的程序无法运行,从根本上杜绝一切可能存在的入侵行为。

金融级密码机:先进密钥管理技术

主要用于实现对主机应用层数据加解密、消息来源正确性验证、密钥管理等,是金融数据安全保护级别的一种有效物理工具,具有完善的密钥管理体系,其特点:能提供由全硬件噪声源产生的真随机密钥(其它交易所提供的均为伪随机密钥);能有效防止通信信道上的主动攻击行为;以物理方式封闭敏感信息使其变为不可读信息;硬件芯片在遭遇拆解时具有自我销毁功能;符合 FIPS 140-2 Level3 国际标准,具有高安全性。

专用U盾:多重安全保障

专用 U 盾与密码机等设备实现物理隔离用户核心信息和私钥, 硬件芯片在拆解时均具有自我销毁功能,没有用户的安全设备,即使窃取硬件也无法从芯片中获得私钥,从而确保用户资产安全,杜绝可能的监守自盗。

Last updated