风险提示:理性看待区块链,提高风险意识!
基于 BOLT 框架构建具有可重用组件和可定制逻辑的井字棋
首页 > 业界 > 区块链 2024-04-17 14:30
摘要
除了抽象 Solana 和重用链上逻辑之外,我们对 BOLT 将为用户生成的逻辑和 mod 引入带来的可能性感到兴奋 。
币界网报道:

作者:Magicblock;来源:MetaCat

本文展示了一个使用 Bolt 引擎的实体组件系统 (ECS) 开发的简单游戏示例,它促进了组件的可重用性,并使用户能够修改和扩展游戏的逻辑。

该框架通过抽象帐户空间(Account Space)和程序派生地址 (Program Derived Addresses)等底层概念,显著简化了基于 Solana 的开发。要与基于 Anchor 的程序进行比较,请参阅本教程?

有关 Bolt 的更详细说明,请参阅公告博文?

开发井字棋

本文第一部分详细介绍如何使用 Bolt 框架实现游戏逻辑。第二部分解释从开源井字棋实现开始,如何将基于 React 的客户端与程序集成。

该示例的完整源代码可在此处获取?

游戏逻辑:使用 Bolt ECS 实现井字棋

首先,安装bolt-cli

npminstall@magicblock-labs/bolt-cli

安装后,使用以下命令创建新项目:

boltinittic-tac-toe

创建组件(Component)

我们需要定义所需的数据结构。为简单起见,我们将创建两个组件:一个包含活跃玩家,另一个包含网格信息。

使用以下命令创建新组件:

boltcomponentplayers

此命令在 program-ecs/components 下创建一个players 组件。保存两个玩家的公钥的玩家组件可以定义如下:

usebolt_lang::*;declare_id!("5Xz6iiE2FZdpqrvCKbGqDajNYt1tP8cRGXrq3THSFo1q");#[component]#[derive(Default)]pubstructPlayers{pubplayers:[Option<Pubkey>;2],}

第二个组件包含网格信息。使用如下命令创建它:

boltcomponentgrid

网格组件可以定义为:

usebolt_lang::*;declare_id!("rdiVoU6KomhXBDMLi6UXVHvmjEUtKqb5iDCWChxMzZ7");#[component]pubstructGrid{pubboard:[[Option<Sign>;3];3],pubstate:GameState,pubis_first_player_turn:bool,}#[component_deserialize]#[derive(PartialEq)]pubenumGameState{Active,Tie,Won{winner:Pubkey},}#[component_deserialize]#[derive(PartialEq)]pubenumSign{X,O,}implSign{pubfnfrom_usize(value:usize)->Sign{matchvalue{0=>Sign::X,_=>Sign::O,}}}implDefaultforGrid{fndefault()->Self{Self::new(GridInit{board:[[None;3];3],state:GameState::Active,is_first_player_turn:true,})}}

创建系统(Systems)

系统以模块化方式实现游戏逻辑。它们对一组输入组件进行操作,并且可以执行任何计算。系统在你的世界实例中执行,并遵守审批策略,例如,一个世界可以允许任何人提交新系统,而另一个世界可能需要白名单方或 DAO 的批准。

我们构建的第一个系统将允许玩家加入比赛:

boltsystemjoin-game

将逻辑(在 program-ecs/systems/join-game.rs 中)修改为:

#[system]pubmodjoin_game{pubfnexecute(ctx:Context<Components>,_args_p:Vec<u8>)->Result<Components>{letplayers=&mutctx.accounts.players.players;letidx=matchplayers.iter_mut().position(|player|player.is_none()){Some(player_index)=>player_index,None=>returnErr(PlayersError::GameFull.into()),};ctx.accounts.players.players[idx]=Some(*ctx.accounts.authority.key);Ok(ctx.accounts)}#[system_input]pubstructComponents{pubplayers:Players,}}

第二个系统实现了游戏的核心逻辑:

1. 创建一个玩游戏系统:

boltsystemplay

2. 实现逻辑:

usebolt_lang::*;usegrid::Grid;useplayers::Players;declare_id!("DyUy1naq1kb3r7HYBrTf7YhnGMJ5k5NqS3Mhk65GfSih");#[system]pubmodplay{pubfnexecute(ctx:Context<Components>,args:Args)->Result<Components>{letgrid=&mutctx.accounts.grid;letplayers=&mutctx.accounts.players;letauthority=*ctx.accounts.authority.key;require!(players.players[0]==Some(authority)||players.players[1]==Some(authority),TicTacToeError::NotInGame);require!(grid.state==grid::GameState::Active,TicTacToeError::NotActive);letplayer_idx:usize=ifplayers.players[0]==Some(authority){0}else{1};require!(grid.is_first_player_turn==(player_idx==0),TicTacToeError::NotPlayersTurn);//Coregamelogicmatchargs{tile@Args{row:0..=2,column:0..=2,}=>matchgrid.board[tile.rowasusize][tile.columnasusize]{Some(_)=>returnErr(TicTacToeError::TileAlreadySet.into()),None=>{grid.board[tile.rowasusize][tile.columnasusize]=Some(grid::Sign::from_usize(player_idx));}},_=>returnErr(TicTacToeError::TileOutOfBounds.into()),}grid.is_first_player_turn=!grid.is_first_player_turn;check_winner(grid,authority);Ok(ctx.accounts)}#[system_input]pubstructComponents{pubgrid:Grid,pubplayers:Players,}#[arguments]structArgs{row:u8,column:u8,}}pubfncheck_winner(grid:&mutAccount<Grid>,player:Pubkey){...}

有关详细信息,请参阅完整源代码?

/blob/main/programs-ecs/systems/play/src/lib.rs

正如你所注意到的,实现非常简单。标记的结构体system_input定义了可以在execute函数中访问和使用的组件输入包。标记为的结构体arguments定义你的系统可以作为输入接收的参数。

构建并测试程序

使用以下命令构建程序:

boltbuild

此命令编译程序并自动生成 IDL 和 TypeScript 类型以进行客户端集成。

设置组件和执行系统的过程涉及以下步骤:

  1. 实例化一个世界。

  2. 创建与之匹配实体。

  3. 将玩家和网格组件附加到该匹配实体。

  4. 执行系统以促进游戏玩法。

Tic-Tac-Toe 游戏的 TypeScript 测试可以在这里找到?

连接 React 客户端

连接 React 客户端非常简单,这要归功于类型的动态检索和生成以及 Bolt TypeScript SDK 提供的实用函数。

添加依赖项:

yarnadd-D@magicblock-labs/bolt-sdk

例如,要执行一个系统:

// Componentsconst GRID_COMPONENT = new PublicKey("rdiVoU6KomhXBDMLi6UXVHvmjEUtKqb5iDCWChxMzZ7");const PLAYERS_COMPONENT = new PublicKey("5Xz6iiE2FZdpqrvCKbGqDajNYt1tP8cRGXrq3THSFo1q");// Systemsconst JOIN_GAME = new PublicKey("2umhnxiCtmg5KTn4L9BLo24uLjb74gAh4tmpMLRKYndN");const PLAY = new PublicKey("DyUy1naq1kb3r7HYBrTf7YhnGMJ5k5NqS3Mhk65GfSih");const applySystem = await ApplySystem({ authority: publicKey, system: JOIN_GAME, entity, components: [PLAYERS_COMPONENT],});const transaction = applySystem.transaction;const signature = await submitTransaction(transaction);

在这里找到用 React 制作的简单井字棋 UI?

/tree/main/app/react-tic-tac-toe

需要强调的一个重要方面是:执行系统和实例化组件仅需要 ID。这意味着可以动态创建和利用新的逻辑和数据结构,从而能够开发模组并更改游戏的行为

结论

我们已经演练了使用 Bolt ECS 的井字棋游戏的简单实现,演示了如何将其连接到 React UI。这凸显了该框架的简单性和灵活性。除了抽象 Solana 和重用链上逻辑之外,我们对 BOLT 将为用户生成的逻辑和 mod 引入带来的可能性感到兴奋。在后续示例中,我们将展示游戏开发人员如何独立且无需许可地扩展游戏逻辑,以及如何使用临时汇总(Ephemeral Rollups)实现低延迟/高吞吐量交易。

发表评论
发表评论
暂无评论
    相关阅读
    币界百科
    币界资讯
    链上数据显示,一家神秘的加密巨头或机构正在吞噬三家数字资产公司的大量以太坊(ETH)。
    区块链
    2025-08-14 01:20:51
    Odin.fun 是一个基于比特币网络的 memecoin 启动平台,已被盗取 58.2 个比特币 (BTC),价值约 700 万美元。Odin.fun 的入侵事件发生于周三,链上数据分析显示,参与其中的……
    比特币
    2025-08-14 01:00:17
    Coinbase 的稳定币基金回归啦!EURC 的采用率会追上 USDC 的增长轨迹吗?
    区块链
    2025-08-14 00:42:50
    根据 NFT Price Floor 的数据,自 7 月以来,NFT 市值已飙升 40%,截至本文撰写时已达到惊人的 94 亿美元。但这并不是……
    区块链
    2025-08-14 00:14:02
    尽管 Shiba Inu 近期表现不佳,但行业评论员表示,有耐心的投资者仍然可以从 SHIB 投资中获得可观的回报。
    区块链
    2025-08-14 00:11:39
    Pi币作为一款备受关注的加密货币,目前面临着诸多利空因素。技术层面,其技术成熟度与安全性存疑,共识算法效果待验证,还可能遭遇黑客攻击或出现技术漏洞。法规方面,全球加密货币监管政策差异大且变动频繁,Pi币合规性不明。价值上,仅能在内部流通,若无法成功上线交易所或市场反应冷淡,价值可能大幅缩水甚至归零。此外,Pi币团队信息不透明、负面舆情频发,也加剧了市场对其的担忧。投资者需谨慎评估风险,理性决策。
    交易所百科
    2025-03-08 10:28:41
    在加密货币交易市场中,VVV交易所和SHOGGOTH杠杆成为近期焦点话题。杠杆交易作为一把双刃剑,既有着放大收益的潜力,也伴随着加剧风险的可能。就像在其他交易场景中,投资者缴纳一定比例保证金就能控制较大价值合约。那么在VVV交易所利用SHOGGOTH杠杆进行交易时,投资者该如何权衡收益与风险?又需要做好哪些准备来应对市场的不确定性呢?深入了解这些,能帮助投资者在加密货币投资领域做出更明智的决策。
    数字货币百科
    2025-03-07 11:38:57
    近期,加密货币市场波动剧烈。2月26日特朗普宣布美国新的加密货币战略储备标的,其中包括瑞波币、Solana和艾达币等,比特币和以太坊为核心。此前特朗普出手曾让比特币、以太坊及特朗普币大幅上涨,超17万人爆仓。但当下特朗普币面临诸多利空。美联储“鹰派”表态,费城联储主席哈克称鉴于特朗普政府政策细节不明,应保持利率不变。同时,Bybit黑客入侵事件加剧市场波动,黑客窃取超15亿美元加密资产,投资者需DYOR,警惕市场风险。
    矿业百科
    2025-03-07 16:15:09
    近期,泰达币(USDT)传来利好消息。截至2025年3月3日13:46:55,其交易价格为0.99970美元,较之前上涨了0.00030美元,涨幅为0.03%,市值高达1423.9亿美元。24H波幅为0.4%,相对不大,符合稳定币特性,降低了投资者因价格大幅波动带来的风险。此外,2025年国内泰达币交易平台易用性和可及性不断进化,让更多普通投资者能轻松入手交易。
    区块链书籍
    2025-03-07 17:24:57
    近期加密货币市场利好消息不断。比如Cardano网络即将进行重大更新,即Chang硬分叉,标志着Voltaire时代的开始,还将实施CIP - 1694链上治理机制,增强其功能。Cosmos在比特币上涨和以太坊ETF推出的背景下,因其专注区块链互操作性,成为有潜力的山寨币。Hedera与贝莱德等合作,展示了其网络潜力。而Polygon计划将MATIC代币更名为POL,这不仅是品牌重塑,更是改善网络功能和支持基础设施的战略举措。这些利好或为加密货币市场带来新的发展趋势,投资者需DYOR,密切关注市场动态。
    交易所百科
    2025-03-07 13:51:35
    以太坊的独特优势,包括可转换债券的更高波动性和优先发行的原生收益,使以太坊财库公司能够实现独特的增长。
    比特币新闻
    2025-07-24 14:31:36
    近期,比特币行情犹如坐上过山车,波动剧烈。刚刚因暴跌引发关注后,3月3日包括比特币在内的主流加密货币大幅上涨,比特币重返9万美元关口上方。此轮上涨的利好消息指向特朗普,他传出将于3月7日主持白宫首届加密货币峰会,还在3月2日深夜明确提出XRP、SOL和ADA将被纳入美国加密货币储备,消息一出,加密货币市场迅速升温。全球币价网站CoinGecko数据显示,截至3月3日17时40分,比特币报91940.74美元,24小时涨幅为6.9% 。此外,加密货币被纳入美国官方资产还释放了监管信号,或推动全球主要市场重新
    交易所知识
    2025-03-04 10:04:06
    以太坊的价格近期一直在上涨。以下是其价格可能继续上涨的原因。
    比特币新闻
    2025-07-23 13:31:41
    在加密货币交易的广阔领域中,Solana杠杆与FLTd永续合约成为众多投资者关注的焦点。Solana杠杆交易涉及借币过程,能放大交易资金,不过操作相对复杂,投资者需留意借币费率等变化。而FLTd永续合约作为无到期日的期货合约,交易灵活,依赖资金费率机制维持平衡。二者虽都涉及杠杆,但在操作方法、定义、规则及特点上存在显著差异。了解它们的特性,能帮助投资者根据自身需求和风险承受能力,选择更适合的交易方式,在加密市场中做出更明智的决策。
    交易所知识
    2025-03-03 20:11:34
    在当今数字化浪潮中,加密货币领域发展迅猛,ZANO交易所官网与STCh平台备受关注。ZANO交易所官网作为行业内颇具影响力的存在,其背后的运营模式、技术支撑等都是众多投资者和爱好者关心的焦点。而STCh平台同样以其独特的功能和创新的理念吸引着各方目光。本文将对ZANO交易所官网和STCh平台进行全方位的剖析,探讨它们在加密货币市场中的定位、发展前景以及面临的挑战等问题,带您深入了解这两个平台的真实面貌,为您在探索加密货币世界的道路上提供有价值的参考信息。无论您是新手小白,还是经验丰富的行业人士,相信都能从
    矿业知识
    2025-03-04 09:41:34
    推荐专栏
    热门币种
    更多
    币种
    美元价格
    24H涨跌幅
    BTC比特币
    121,695.09 USDT
    ¥873,369.15
    +1.78%
    ETH以太坊
    4,733.23 USDT
    ¥34,457.91
    +5.41%
    XRP瑞波币
    3.27 USDT
    ¥23.48
    +1.05%
    USDT泰达币
    0.99990 USDT
    ¥7.18
    +0.01%
    BNB币安币
    842.40 USDT
    ¥6,132.67
    +1.69%
    SOL
    200.12 USDT
    ¥1,456.87
    +6.34%
    USDC
    0.99970 USDT
    ¥7.17
    0%
    DOGE狗狗币
    0.24320 USDT
    ¥1.75
    +4.65%
    TRX波场币
    0.36090 USDT
    ¥2.59
    +3.26%
    ADA艾达币
    0.87340 USDT
    ¥6.27
    +5.19%
    热搜币种
    更多
    币种
    美元价格
    24H涨跌幅
    OK币
    102.81 USDT
    ¥748.46
    +120.86%
    OKC Token
    8.7007 USDT
    ¥63.34
    +77.74%
    柚子
    0.5658 USDT
    ¥4.12
    +3.57%
    Conflux
    0.1959 USDT
    ¥1.43
    -1.95%
    Gatechain Token
    17.6179 USDT
    ¥128.26
    +5.49%
    Filecoin
    2.7112 USDT
    ¥19.74
    +3.1%
    比特币
    121695.09 USDT
    ¥885,940.26
    +1.78%
    火币积分
    0.1861 USDT
    ¥1.35
    +3.79%
    以太坊
    4,733.23 USDT
    ¥34,457.91
    +5.41%
    以太经典
    24.1161 USDT
    ¥175.57
    +2.54%
    Solana
    200.12 USDT
    ¥1,456.87
    +6.34%
    Uniswap
    12.0314 USDT
    ¥87.59
    +5.38%
    最新快讯
    更多
    美联储古尔斯比警告劳动力市场信号需关注
    2025-08-14 02:06:27
    美联储古尔斯比:长期利率是抵押贷款主要决定因素
    2025-08-14 02:03:16
    币界网大额成交监控
    2025-08-14 01:57:52
    美联储古尔斯比表示下次会议前仍有通胀数据待公布
    2025-08-14 01:47:24
    美联储古尔斯比称劳动力市场相当稳固
    2025-08-14 01:47:24
    美联储古尔斯比表示不喜欢提前确定利率
    2025-08-14 01:40:54
    美联储固定利率逆回购操作规模降至572.02亿美元新低
    2025-08-14 01:37:44