fix: catchup to upstream loader changes

This commit is contained in:
Michael Vines 2018-10-18 14:29:57 -07:00
parent 00fd0fc435
commit 757cf3ec16
4 changed files with 32 additions and 4 deletions

View File

@ -69,6 +69,7 @@ declare module '@solana/web3.js' {
): Transaction;
static move(from: PublicKey, to: PublicKey, amount: number): Transaction;
static assign(from: PublicKey, programId: PublicKey): Transaction;
static spawn(programId: PublicKey): Transaction;
}
// === src/transaction.js ===

View File

@ -2,7 +2,7 @@
import * as BufferLayout from 'buffer-layout';
import {PublicKey, Transaction} from '.';
import {PublicKey, SystemProgram, Transaction} from '.';
import {sendAndConfirmTransaction} from './util/send-and-confirm-transaction';
import type {Account, Connection} from '.';
@ -85,12 +85,15 @@ export class Loader {
userdata,
);
const transaction = new Transaction({
let transaction = new Transaction({
fee: 0,
keys: [program.publicKey],
programId: this.programId,
userdata,
});
await sendAndConfirmTransaction(this.connection, program, transaction);
transaction = SystemProgram.spawn(program.publicKey);
await sendAndConfirmTransaction(this.connection, program, transaction);
}
}

View File

@ -105,4 +105,28 @@ export class SystemProgram {
userdata,
});
}
/**
* Spawn a new program from an account
*/
static spawn(programId: PublicKey): Transaction {
const userdataLayout = BufferLayout.struct([
BufferLayout.u32('instruction'),
]);
const userdata = Buffer.alloc(userdataLayout.span);
userdataLayout.encode(
{
instruction: 3, // Spawn instruction
},
userdata,
);
return new Transaction({
fee: 0,
keys: [programId],
programId: SystemProgram.programId,
userdata,
});
}
}

View File

@ -9,7 +9,7 @@ import {mockRpcEnabled} from './__mocks__/node-fetch';
import {url} from './url';
import {newAccountWithTokens} from './new-account-with-tokens';
test('unstable - load', async () => {
test('load noop program', async () => {
if (mockRpcEnabled) {
console.log('non-live test skipped');
return;
@ -25,6 +25,6 @@ test('unstable - load', async () => {
programId: noopProgramId,
});
const signature = await connection.sendTransaction(from, noopTransaction);
expect(connection.confirmTransaction(signature)).resolves.toBe(true);
await expect(connection.confirmTransaction(signature)).resolves.toBe(true);
});