WorldTest.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Solana.Unity.Bolt.Test;
  2. using Solana.Unity.Programs;
  3. using Solana.Unity.Rpc.Models;
  4. using System;
  5. using System.Threading.Tasks;
  6. using World.Accounts;
  7. using World.Program;
  8. namespace WorldTest {
  9. public class Test {
  10. public static async Task Run(Framework framework) {
  11. await Profiler.Run("InitializeRegistry", async () => {
  12. await InitializeRegistry(framework);
  13. });
  14. await Profiler.Run("InitializeWorld", async () => {
  15. await InitializeWorld(framework);
  16. });
  17. await Profiler.Run("InitializeSecondWorld", async () => {
  18. await InitializeSecondWorld(framework);
  19. });
  20. }
  21. public static async Task InitializeRegistry(Framework framework) {
  22. framework.RegistryPda = WorldProgram.FindRegistryPda();
  23. InitializeRegistryAccounts initializeRegistry = new InitializeRegistryAccounts() {
  24. Registry = framework.RegistryPda,
  25. Payer = framework.Wallet.Account.PublicKey,
  26. SystemProgram = SystemProgram.ProgramIdKey,
  27. };
  28. TransactionInstruction instruction = WorldProgram.InitializeRegistry(initializeRegistry);
  29. try {
  30. await framework.SendAndConfirmInstruction(instruction);
  31. } catch (Exception) {
  32. // We ignore this error because it happens when the registry already exists
  33. }
  34. }
  35. public static async Task InitializeWorld(Framework framework) {
  36. var accountInfo = await framework.GetAccountInfo(framework.RegistryPda);
  37. var data = Convert.FromBase64String(accountInfo.Data[0]);
  38. var registry = Registry.Deserialize(data);
  39. framework.WorldPda = WorldProgram.FindWorldPda(registry.Worlds);
  40. var initializeNewWorld = new InitializeNewWorldAccounts() {
  41. Registry = framework.RegistryPda,
  42. Payer = framework.Wallet.Account.PublicKey,
  43. SystemProgram = SystemProgram.ProgramIdKey,
  44. World = framework.WorldPda,
  45. };
  46. TransactionInstruction instruction = WorldProgram.InitializeNewWorld(initializeNewWorld);
  47. await framework.SendAndConfirmInstruction(instruction);
  48. }
  49. public static async Task InitializeSecondWorld(Framework framework) {
  50. var accountInfo = await framework.GetAccountInfo(framework.RegistryPda);
  51. var data = Convert.FromBase64String(accountInfo.Data[0]);
  52. var registry = Registry.Deserialize(data);
  53. var WorldPda = WorldProgram.FindWorldPda(registry.Worlds);
  54. var initializeNewWorld = new InitializeNewWorldAccounts() {
  55. Registry = framework.RegistryPda,
  56. Payer = framework.Wallet.Account.PublicKey,
  57. SystemProgram = SystemProgram.ProgramIdKey,
  58. World = WorldPda,
  59. };
  60. TransactionInstruction instruction = WorldProgram.InitializeNewWorld(initializeNewWorld);
  61. await framework.SendAndConfirmInstruction(instruction);
  62. }
  63. }
  64. }