| 
									
										
										
										
											2021-10-13 16:52:52 -07:00
										 |  |  | import { expect } from "chai"; | 
					
						
							| 
									
										
										
										
											2022-03-10 18:58:22 +08:00
										 |  |  | import { solana_program_init, Pubkey } from "crate"; | 
					
						
							|  |  |  | solana_program_init(); | 
					
						
							| 
									
										
										
										
											2021-10-13 16:52:52 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | // TODO: wasm_bindgen doesn't currently support exporting constants
 | 
					
						
							|  |  |  | const MAX_SEED_LEN = 32; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe("Pubkey", function () { | 
					
						
							|  |  |  |   it("invalid", () => { | 
					
						
							|  |  |  |     expect(() => { | 
					
						
							|  |  |  |       new Pubkey([ | 
					
						
							|  |  |  |         3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |         0, 0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |       ]); | 
					
						
							|  |  |  |     }).to.throw(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(() => { | 
					
						
							|  |  |  |       new Pubkey([ | 
					
						
							|  |  |  |         'invalid', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |         0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |       ]); | 
					
						
							|  |  |  |     }).to.throw(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(() => { | 
					
						
							|  |  |  |       new Pubkey( | 
					
						
							|  |  |  |         "0x300000000000000000000000000000000000000000000000000000000000000000000" | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }).to.throw(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(() => { | 
					
						
							|  |  |  |       new Pubkey( | 
					
						
							|  |  |  |         "0x300000000000000000000000000000000000000000000000000000000000000" | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }).to.throw(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(() => { | 
					
						
							|  |  |  |       new Pubkey( | 
					
						
							|  |  |  |         "135693854574979916511997248057056142015550763280047535983739356259273198796800000" | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }).to.throw(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(() => { | 
					
						
							|  |  |  |       new Pubkey("12345"); | 
					
						
							|  |  |  |     }).to.throw(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it("toString", () => { | 
					
						
							|  |  |  |     const key = new Pubkey("CiDwVBFgWV9E5MvXWoLgnEgn2hK7rJikbvfWavzAQz3"); | 
					
						
							|  |  |  |     expect(key.toString()).to.eq("CiDwVBFgWV9E5MvXWoLgnEgn2hK7rJikbvfWavzAQz3"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const key2 = new Pubkey("1111111111111111111111111111BukQL"); | 
					
						
							|  |  |  |     expect(key2.toString()).to.eq("1111111111111111111111111111BukQL"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const key3 = new Pubkey("11111111111111111111111111111111"); | 
					
						
							|  |  |  |     expect(key3.toString()).to.eq("11111111111111111111111111111111"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const key4 = new Pubkey([ | 
					
						
							|  |  |  |       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |       0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |     ]); | 
					
						
							|  |  |  |     expect(key4.toString()).to.eq("11111111111111111111111111111111"); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it("toBytes", () => { | 
					
						
							|  |  |  |     const key = new Pubkey("CiDwVBFgWV9E5MvXWoLgnEgn2hK7rJikbvfWavzAQz3"); | 
					
						
							|  |  |  |     expect(key.toBytes()).to.deep.equal( | 
					
						
							|  |  |  |       new Uint8Array([ | 
					
						
							|  |  |  |         3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |         0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |       ]) | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const key2 = new Pubkey(); | 
					
						
							|  |  |  |     expect(key2.toBytes()).to.deep.equal( | 
					
						
							|  |  |  |       new Uint8Array([ | 
					
						
							|  |  |  |         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |         0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |       ]) | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it("isOnCurve", () => { | 
					
						
							|  |  |  |     let onCurve = new Pubkey("J4NYrSRccTUGXP7wmFwiByakqWKZb5RwpiAoskpgAQRb"); | 
					
						
							|  |  |  |     expect(onCurve.isOnCurve()).to.be.true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let offCurve = new Pubkey("12rqwuEgBYiGhBrDJStCiqEtzQpTTiZbh7teNVLuYcFA"); | 
					
						
							|  |  |  |     expect(offCurve.isOnCurve()).to.be.false; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it("equals", () => { | 
					
						
							|  |  |  |     const arrayKey = new Pubkey([ | 
					
						
							|  |  |  |       3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |       0, 0, 0, 0, 0, 0, 0, | 
					
						
							|  |  |  |     ]); | 
					
						
							|  |  |  |     const base58Key = new Pubkey("CiDwVBFgWV9E5MvXWoLgnEgn2hK7rJikbvfWavzAQz3"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(arrayKey.equals(base58Key)).to.be.true; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it("createWithSeed", async () => { | 
					
						
							|  |  |  |     const defaultPublicKey = new Pubkey("11111111111111111111111111111111"); | 
					
						
							|  |  |  |     const derivedKey = Pubkey.createWithSeed( | 
					
						
							|  |  |  |       defaultPublicKey, | 
					
						
							|  |  |  |       "limber chicken: 4/45", | 
					
						
							|  |  |  |       defaultPublicKey | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect( | 
					
						
							|  |  |  |       derivedKey.equals( | 
					
						
							|  |  |  |         new Pubkey("9h1HyLCW5dZnBVap8C5egQ9Z6pHyjsh5MNy83iPqqRuq") | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ).to.be.true; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it("createProgramAddress", async () => { | 
					
						
							|  |  |  |     const programId = new Pubkey("BPFLoader1111111111111111111111111111111111"); | 
					
						
							|  |  |  |     const publicKey = new Pubkey("SeedPubey1111111111111111111111111111111111"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let programAddress = Pubkey.createProgramAddress( | 
					
						
							|  |  |  |       [Buffer.from("", "utf8"), Buffer.from([1])], | 
					
						
							|  |  |  |       programId | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect( | 
					
						
							|  |  |  |       programAddress.equals( | 
					
						
							|  |  |  |         new Pubkey("3gF2KMe9KiC6FNVBmfg9i267aMPvK37FewCip4eGBFcT") | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ).to.be.true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     programAddress = Pubkey.createProgramAddress( | 
					
						
							|  |  |  |       [Buffer.from("☉", "utf8")], | 
					
						
							|  |  |  |       programId | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect( | 
					
						
							|  |  |  |       programAddress.equals( | 
					
						
							|  |  |  |         new Pubkey("7ytmC1nT1xY4RfxCV2ZgyA7UakC93do5ZdyhdF3EtPj7") | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ).to.be.true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     programAddress = Pubkey.createProgramAddress( | 
					
						
							|  |  |  |       [Buffer.from("Talking", "utf8"), Buffer.from("Squirrels", "utf8")], | 
					
						
							|  |  |  |       programId | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect( | 
					
						
							|  |  |  |       programAddress.equals( | 
					
						
							|  |  |  |         new Pubkey("HwRVBufQ4haG5XSgpspwKtNd3PC9GM9m1196uJW36vds") | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ).to.be.true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     programAddress = Pubkey.createProgramAddress( | 
					
						
							|  |  |  |       [publicKey.toBytes()], | 
					
						
							|  |  |  |       programId | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect( | 
					
						
							|  |  |  |       programAddress.equals( | 
					
						
							|  |  |  |         new Pubkey("GUs5qLUfsEHkcMB9T38vjr18ypEhRuNWiePW2LoK4E3K") | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ).to.be.true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const programAddress2 = Pubkey.createProgramAddress( | 
					
						
							|  |  |  |       [Buffer.from("Talking", "utf8")], | 
					
						
							|  |  |  |       programId | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect(programAddress.equals(programAddress2)).to.eq(false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(() => { | 
					
						
							|  |  |  |       Pubkey.createProgramAddress([Buffer.alloc(MAX_SEED_LEN + 1)], programId); | 
					
						
							|  |  |  |     }).to.throw(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it("findProgramAddress", async () => { | 
					
						
							|  |  |  |     const programId = new Pubkey("BPFLoader1111111111111111111111111111111111"); | 
					
						
							|  |  |  |     let [programAddress, nonce] = Pubkey.findProgramAddress( | 
					
						
							|  |  |  |       [Buffer.from("", "utf8")], | 
					
						
							|  |  |  |       programId | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect( | 
					
						
							|  |  |  |       programAddress.equals( | 
					
						
							|  |  |  |         Pubkey.createProgramAddress( | 
					
						
							|  |  |  |           [Buffer.from("", "utf8"), Buffer.from([nonce])], | 
					
						
							|  |  |  |           programId | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ).to.be.true; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); |