| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- import 'solana';
- contract creator {
- function create_child() external {
- print("Going to create child");
- Child.new();
- Child.say_hello();
- }
- function create_seed1(bytes seed, bytes1 bump, uint64 space) external {
- print("Going to create Seed1");
- Seed1.new(seed, bump, space);
- Seed1.say_hello();
- }
- function create_seed2(bytes seed, uint32 space) external {
- print("Going to create Seed2");
- Seed2.new(seed, space);
- }
- @mutableSigner(child)
- @mutableSigner(payer)
- function create_child_with_metas() external {
- print("Going to create child with metas");
- AccountMeta[3] metas = [
- AccountMeta({pubkey: tx.accounts.child.key, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: tx.accounts.payer.key, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: address"11111111111111111111111111111111", is_writable: false, is_signer: false})
- ];
- Child.new{accounts: metas}();
- Child.use_metas();
- }
- function create_without_annotation() external {
- MyCreature.new();
- MyCreature.say_my_name{accounts: []}();
- }
- @signer(my_signer)
- function call_with_signer() view external {
- require(tx.accounts.my_signer.is_signer, "the signer must sign the transaction");
- print("Signer found");
- }
- }
- @program_id("Chi1d5XD6nTAp2EyaNGqMxZzUjh6NvhXRxbGHP3D1RaT")
- contract Child {
- @payer(payer)
- @space(511 + 7)
- constructor() {
- assert(tx.accounts.payer.is_signer);
- assert(tx.accounts.payer.is_writable);
- print("In child constructor");
- }
- function say_hello() pure public {
- print("Hello there");
- }
- function use_metas() pure public {
- print("I am using metas");
- }
- }
- @program_id("SeedHw4CsFsDEGu2AVwFM1toGXsbAJSKnb7kS8TrLxu")
- contract Seed1 {
- bytes saved_seed;
- bytes1 saved_bump;
- @payer(payer)
- constructor(@seed bytes seed, @bump bytes1 bump, @space uint64 space) {
- print("In Seed1 constructor");
- saved_seed = seed;
- saved_bump = bump;
- }
- function say_hello() pure public {
- print("Hello from Seed1");
- }
- @account(creator_program_id)
- function sign() view external {
- AccountMeta[1] metas = [
- AccountMeta({pubkey: tx.accounts.dataAccount.key, is_signer: true, is_writable: false})
- ];
- creator.call_with_signer{seeds: [ [ saved_seed, saved_bump ] ],
- accounts: metas,
- program_id: tx.accounts.creator_program_id.key}();
- }
- }
- @program_id("Seed23VDZ9HFCfKvFwmemB6dpi25n5XjZdP52B2RUmh")
- contract Seed2 {
- bytes my_seed;
- @payer(payer)
- @seed("sunflower")
- constructor(@seed bytes seed, @space uint64 space) {
- my_seed = seed;
- print("In Seed2 constructor");
- }
- function check() public view {
- address pda = create_program_address([ "sunflower", my_seed ], address(this));
- if (pda == tx.accounts.dataAccount.key) {
- print("I am PDA.");
- }
- }
- @account(creator_program_id)
- function sign() view external {
- bytes[2][1] seeds = [ [ "sunflower", my_seed ] ];
- sign2(seeds, tx.accounts.dataAccount.key, tx.accounts.creator_program_id.key);
- }
- function sign2(bytes[2][1] seeds, address child, address creator_program_id) view internal {
- AccountMeta[1] metas = [
- AccountMeta({pubkey: child, is_signer: true, is_writable: false})
- ];
- creator.call_with_signer{seeds: seeds, accounts: metas, program_id: creator_program_id}();
- }
- @account(pdaSigner)
- @account(creatorId)
- function pda_sign(uint8 bump) external view {
- (address pda, bytes1 _bump) = try_find_program_address(["mint_authority"], address(this));
- assert(bump == _bump);
- assert(pda == tx.accounts.pdaSigner.key);
- AccountMeta[1] metas = [
- AccountMeta({pubkey: tx.accounts.pdaSigner.key, is_signer: true, is_writable: false})
- ];
- creator.call_with_signer{accounts: metas, seeds: [["mint_authority", abi.encode(_bump)]], program_id: tx.accounts.creatorId.key}();
- }
- }
- @program_id("8gTkAidfM82u3DGbKcZpHwL5p47KQA16MDb4WmrHdmF6")
- contract MyCreature {
- constructor() {
- print("In child constructor");
- }
- function say_my_name() public pure {
- print("say_my_name");
- }
- }
|