Skip to content

Commit acb50b4

Browse files
notdaniloobstoody
andauthored
feat: add missing apply function in sdk and add test for it (#103)
Co-authored-by: obstoody <[email protected]>
1 parent f0a98a0 commit acb50b4

File tree

3 files changed

+111
-29
lines changed

3 files changed

+111
-29
lines changed

clients/bolt-sdk/src/generated/instructions/apply.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export interface ApplyInstructionAccounts {
5050
boltComponent: web3.PublicKey;
5151
authority: web3.PublicKey;
5252
instructionSysvarAccount: web3.PublicKey;
53+
world: web3.PublicKey;
5354
anchorRemainingAccounts?: web3.AccountMeta[];
5455
}
5556

@@ -102,6 +103,11 @@ export function createApplyInstruction(
102103
isWritable: false,
103104
isSigner: false,
104105
},
106+
{
107+
pubkey: accounts.world,
108+
isWritable: false,
109+
isSigner: false,
110+
},
105111
];
106112

107113
if (accounts.anchorRemainingAccounts != null) {

clients/bolt-sdk/src/world/transactions.ts

Lines changed: 74 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
createApplyInstruction,
23
createAddEntityInstruction,
34
createInitializeComponentInstruction,
45
createInitializeNewWorldInstruction,
@@ -47,14 +48,15 @@ export async function InitializeNewWorld({
4748
const registry = await Registry.fromAccountAddress(connection, registryPda);
4849
const worldId = new BN(registry.worlds);
4950
const worldPda = FindWorldPda({ worldId });
50-
const initializeWorldIx = createInitializeNewWorldInstruction({
51+
const instruction = createInitializeNewWorldInstruction({
5152
world: worldPda,
5253
registry: registryPda,
5354
payer,
5455
});
56+
const transaction = new Transaction().add(instruction);
5557
return {
56-
instruction: initializeWorldIx,
57-
transaction: new Transaction().add(initializeWorldIx),
58+
instruction,
59+
transaction,
5860
worldPda,
5961
worldId,
6062
};
@@ -87,17 +89,18 @@ export async function AddAuthority({
8789
) as unknown as Program<WorldProgram>;
8890
const worldInstance = await World.fromAccountAddress(connection, world);
8991
const worldId = new BN(worldInstance.id);
90-
const addAuthorityIx = await program.methods
92+
const instruction = await program.methods
9193
.addAuthority(worldId)
9294
.accounts({
9395
authority,
9496
newAuthority,
9597
world,
9698
})
9799
.instruction();
100+
const transaction = new Transaction().add(instruction);
98101
return {
99-
instruction: addAuthorityIx,
100-
transaction: new Transaction().add(addAuthorityIx),
102+
instruction,
103+
transaction,
101104
};
102105
}
103106

@@ -128,17 +131,18 @@ export async function RemoveAuthority({
128131
) as unknown as Program<WorldProgram>;
129132
const worldInstance = await World.fromAccountAddress(connection, world);
130133
const worldId = new BN(worldInstance.id);
131-
const removeAuthorityIx = await program.methods
134+
const instruction = await program.methods
132135
.removeAuthority(worldId)
133136
.accounts({
134137
authority,
135138
authorityToDelete,
136139
world,
137140
})
138141
.instruction();
142+
const transaction = new Transaction().add(instruction);
139143
return {
140-
instruction: removeAuthorityIx,
141-
transaction: new Transaction().add(removeAuthorityIx),
144+
instruction,
145+
transaction,
142146
};
143147
}
144148

@@ -164,17 +168,18 @@ export async function ApproveSystem({
164168
const program = new Program(
165169
worldIdl as Idl,
166170
) as unknown as Program<WorldProgram>;
167-
const approveSystemIx = await program.methods
171+
const instruction = await program.methods
168172
.approveSystem()
169173
.accounts({
170174
authority,
171175
system: systemToApprove,
172176
world,
173177
})
174178
.instruction();
179+
const transaction = new Transaction().add(instruction);
175180
return {
176-
instruction: approveSystemIx,
177-
transaction: new Transaction().add(approveSystemIx),
181+
instruction,
182+
transaction,
178183
};
179184
}
180185

@@ -200,17 +205,18 @@ export async function RemoveSystem({
200205
const program = new Program(
201206
worldIdl as Idl,
202207
) as unknown as Program<WorldProgram>;
203-
const removeSystemIx = await program.methods
208+
const instruction = await program.methods
204209
.removeSystem()
205210
.accounts({
206211
authority,
207212
system: systemToRemove,
208213
world,
209214
})
210215
.instruction();
216+
const transaction = new Transaction().add(instruction);
211217
return {
212-
instruction: removeSystemIx,
213-
transaction: new Transaction().add(removeSystemIx),
218+
instruction,
219+
transaction,
214220
};
215221
}
216222

@@ -242,17 +248,18 @@ export async function AddEntity({
242248
seed !== undefined
243249
? FindEntityPda({ worldId, seed })
244250
: FindEntityPda({ worldId, entityId: new BN(worldInstance.entities) });
245-
const addEntityIx = createAddEntityInstruction(
251+
const instruction = createAddEntityInstruction(
246252
{
247253
world,
248254
payer,
249255
entity: entityPda,
250256
},
251257
{ extraSeed: seed ?? null },
252258
);
259+
const transaction = new Transaction().add(instruction);
253260
return {
254-
instruction: addEntityIx,
255-
transaction: new Transaction().add(addEntityIx),
261+
instruction,
262+
transaction,
256263
entityPda,
257264
};
258265
}
@@ -287,7 +294,7 @@ export async function InitializeComponent({
287294
componentPda: PublicKey;
288295
}> {
289296
const componentPda = FindComponentPda({ componentId, entity, seed });
290-
const initializeComponentIx = createInitializeComponentInstruction({
297+
const instruction = createInitializeComponentInstruction({
291298
payer,
292299
entity,
293300
data: componentPda,
@@ -296,13 +303,55 @@ export async function InitializeComponent({
296303
instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,
297304
anchorRemainingAccounts,
298305
});
306+
const transaction = new Transaction().add(instruction);
299307
return {
300-
instruction: initializeComponentIx,
301-
transaction: new Transaction().add(initializeComponentIx),
308+
instruction,
309+
transaction,
302310
componentPda,
303311
};
304312
}
305313

314+
export async function Apply({
315+
authority,
316+
boltSystem,
317+
boltComponent,
318+
componentProgram,
319+
anchorRemainingAccounts,
320+
world,
321+
args,
322+
}: {
323+
authority: PublicKey;
324+
boltSystem: PublicKey;
325+
boltComponent: PublicKey;
326+
componentProgram: PublicKey;
327+
world: PublicKey;
328+
anchorRemainingAccounts?: web3.AccountMeta[];
329+
args: Uint8Array;
330+
}): Promise<{
331+
instruction: TransactionInstruction;
332+
transaction: Transaction;
333+
}> {
334+
const instruction = createApplyInstruction(
335+
{
336+
authority,
337+
boltSystem,
338+
boltComponent,
339+
componentProgram,
340+
instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,
341+
anchorRemainingAccounts,
342+
world,
343+
},
344+
{
345+
args,
346+
},
347+
);
348+
const transaction = new Transaction().add(instruction);
349+
return {
350+
instruction,
351+
transaction,
352+
};
353+
}
354+
306355
interface ApplySystemInstruction {
307356
authority: PublicKey;
308357
systemId: PublicKey;
@@ -410,16 +459,17 @@ export async function ApplySystem({
410459
extraAccounts?: web3.AccountMeta[];
411460
args?: object;
412461
}): Promise<{ instruction: TransactionInstruction; transaction: Transaction }> {
413-
const applySystemIx = await createApplySystemInstruction({
462+
const instruction = await createApplySystemInstruction({
414463
authority,
415464
systemId,
416465
entities,
417466
world,
418467
extraAccounts,
419468
args,
420469
});
470+
const transaction = new Transaction().add(instruction);
421471
return {
422-
instruction: applySystemIx,
423-
transaction: new Transaction().add(applySystemIx),
472+
instruction,
473+
transaction,
424474
};
425475
}

tests/bolt.ts

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
InitializeComponent,
1717
InitializeNewWorld,
1818
ApplySystem,
19+
Apply,
1920
DelegateComponent,
2021
AddAuthority,
2122
RemoveAuthority,
@@ -24,6 +25,7 @@ import {
2425
type Program,
2526
anchor,
2627
web3,
28+
SerializeArgs,
2729
} from "../clients/bolt-sdk";
2830

2931
enum Direction {
@@ -314,6 +316,30 @@ describe("bolt", () => {
314316
expect(position.z.toNumber()).to.equal(0);
315317
});
316318

319+
it("Apply Simple Movement System (Up) on Entity 1 using Apply", async () => {
320+
console.log("Apply", Apply);
321+
const apply = await Apply({
322+
authority: provider.wallet.publicKey,
323+
boltSystem: exampleSystemSimpleMovement,
324+
boltComponent: componentPositionEntity1Pda,
325+
componentProgram: exampleComponentPosition.programId,
326+
world: worldPda,
327+
args: SerializeArgs({
328+
direction: Direction.Up,
329+
}),
330+
});
331+
332+
await provider.sendAndConfirm(apply.transaction);
333+
334+
const position = await exampleComponentPosition.account.position.fetch(
335+
componentPositionEntity1Pda,
336+
);
337+
logPosition("Movement System: Entity 1", position);
338+
expect(position.x.toNumber()).to.equal(0);
339+
expect(position.y.toNumber()).to.equal(1);
340+
expect(position.z.toNumber()).to.equal(0);
341+
});
342+
317343
it("Apply Simple Movement System (Up) on Entity 1", async () => {
318344
const applySystem = await ApplySystem({
319345
authority: provider.wallet.publicKey,
@@ -341,7 +367,7 @@ describe("bolt", () => {
341367
);
342368
logPosition("Movement System: Entity 1", position);
343369
expect(position.x.toNumber()).to.equal(0);
344-
expect(position.y.toNumber()).to.equal(1);
370+
expect(position.y.toNumber()).to.equal(2);
345371
expect(position.z.toNumber()).to.equal(0);
346372
});
347373

@@ -367,7 +393,7 @@ describe("bolt", () => {
367393
);
368394
logPosition("Movement System: Entity 1", position);
369395
expect(position.x.toNumber()).to.equal(1);
370-
expect(position.y.toNumber()).to.equal(1);
396+
expect(position.y.toNumber()).to.equal(2);
371397
expect(position.z.toNumber()).to.equal(0);
372398
});
373399

@@ -390,7 +416,7 @@ describe("bolt", () => {
390416
);
391417
logPosition("Fly System: Entity 1", position);
392418
expect(position.x.toNumber()).to.equal(1);
393-
expect(position.y.toNumber()).to.equal(1);
419+
expect(position.y.toNumber()).to.equal(2);
394420
expect(position.z.toNumber()).to.equal(1);
395421
});
396422

@@ -428,7 +454,7 @@ describe("bolt", () => {
428454
);
429455
logPosition("Apply System Velocity: Entity 1", position);
430456
expect(position.x.toNumber()).to.greaterThan(1);
431-
expect(position.y.toNumber()).to.equal(1);
457+
expect(position.y.toNumber()).to.equal(2);
432458
expect(position.z.toNumber()).to.equal(1);
433459
});
434460

@@ -466,7 +492,7 @@ describe("bolt", () => {
466492
);
467493
logPosition("Apply System Velocity: Entity 1", position);
468494
expect(position.x.toNumber()).to.greaterThan(1);
469-
expect(position.y.toNumber()).to.equal(1);
495+
expect(position.y.toNumber()).to.equal(2);
470496
expect(position.z.toNumber()).to.equal(300);
471497
});
472498

0 commit comments

Comments
 (0)