Skip to content

Commit 8826631

Browse files
committed
Got ChainComponentsTests working with ChainWriter
1 parent f73928c commit 8826631

File tree

3 files changed

+6
-117
lines changed

3 files changed

+6
-117
lines changed

contracts/programs/contract-reader-interface/src/lib.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ pub mod contract_reader_interface {
3535
#[derive(Accounts)]
3636
#[instruction(test_idx: u64)]
3737
pub struct Initialize<'info> {
38+
#[account(mut)]
39+
pub signer: Signer<'info>,
40+
3841
// derived test PDA
3942
#[account(
4043
init,
@@ -44,9 +47,6 @@ pub struct Initialize<'info> {
4447
bump)]
4548
pub data: Account<'info, DataAccount>,
4649

47-
#[account(mut)]
48-
pub signer: Signer<'info>,
49-
5050
pub system_program: Program<'info, System>,
5151
}
5252

integration-tests/relayinterface/chain_components_test.go

+3-101
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ package relayinterface
66
import (
77
"context"
88
"encoding/binary"
9-
"fmt"
10-
"io"
11-
"log"
129
"os"
1310
"path/filepath"
1411
"sync"
@@ -18,11 +15,11 @@ import (
1815
"github.com/gagliardetto/solana-go"
1916
"github.com/gagliardetto/solana-go/rpc"
2017
"github.com/gagliardetto/solana-go/rpc/ws"
21-
"github.com/gagliardetto/solana-go/text"
2218
"github.com/stretchr/testify/require"
2319
"github.com/test-go/testify/mock"
2420

2521
"github.com/smartcontractkit/chainlink-common/pkg/codec"
22+
commonconfig "github.com/smartcontractkit/chainlink-common/pkg/config"
2623
"github.com/smartcontractkit/chainlink-common/pkg/logger"
2724
commontestutils "github.com/smartcontractkit/chainlink-common/pkg/loop/testutils"
2825
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
@@ -310,6 +307,7 @@ func (h *helper) Init(t *testing.T) {
310307
solanautils.FundAccounts(t, []solana.PrivateKey{privateKey}, h.rpcClient)
311308

312309
cfg := config.NewDefault()
310+
cfg.Chain.TxRetentionTimeout = commonconfig.MustNewDuration(10 * time.Minute)
313311
solanaClient, err := client.NewClient(h.rpcURL, cfg, 5*time.Second, nil)
314312
require.NoError(t, err)
315313

@@ -319,8 +317,6 @@ func (h *helper) Init(t *testing.T) {
319317
mkey := keyMocks.NewSimpleKeystore(t)
320318
mkey.On("Sign", mock.Anything, privateKey.PublicKey().String(), mock.Anything).Return(func(_ context.Context, _ string, data []byte) []byte {
321319
sig, _ := privateKey.Sign(data)
322-
verifySignature(privateKey.PublicKey(), sig[:], data)
323-
fmt.Printf("Signed for %s: %x\n", privateKey.PublicKey().String(), sig)
324320
return sig[:]
325321
}, nil)
326322
lggr := logger.Test(t)
@@ -336,16 +332,6 @@ func (h *helper) Init(t *testing.T) {
336332
h.programID = pubkey
337333
}
338334

339-
func verifySignature(publicKey solana.PublicKey, signature []byte, message []byte) bool {
340-
valid := publicKey.Verify(message, solana.SignatureFromBytes(signature))
341-
if valid {
342-
log.Printf("Signature is valid for public key: %s\n", publicKey.String())
343-
} else {
344-
log.Printf("Signature is invalid for public key: %s\n", publicKey.String())
345-
}
346-
return valid
347-
}
348-
349335
func (h *helper) RPCClient() *chainreader.RPCClientWrapper {
350336
return &chainreader.RPCClientWrapper{Client: h.rpcClient}
351337
}
@@ -404,13 +390,7 @@ func (h *helper) CreateAccount(t *testing.T, it SolanaChainComponentsInterfaceTe
404390
pubKey, _, err := solana.FindProgramAddress([][]byte{[]byte("data"), bts}, h.programID)
405391
require.NoError(t, err)
406392

407-
// Getting the default localnet private key
408-
privateKey, err := solana.PrivateKeyFromBase58(solclient.DefaultPrivateKeysSolValidator[1])
409-
require.NoError(t, err)
410-
411-
h.runInitialize(t, it, nonce, value, pubKey, func(key solana.PublicKey) *solana.PrivateKey {
412-
return &privateKey
413-
}, privateKey.PublicKey())
393+
h.runInitialize(t, it, nonce, value)
414394

415395
return pubKey
416396
}
@@ -420,9 +400,6 @@ func (h *helper) runInitialize(
420400
it SolanaChainComponentsInterfaceTester[*testing.T],
421401
nonce uint64,
422402
value uint64,
423-
data solana.PublicKey,
424-
signerFunc func(key solana.PublicKey) *solana.PrivateKey,
425-
payer solana.PublicKey,
426403
) {
427404
t.Helper()
428405

@@ -436,82 +413,7 @@ func (h *helper) runInitialize(
436413
buf := make([]byte, 8)
437414
binary.LittleEndian.PutUint64(buf, nonce*value)
438415

439-
data, _, err := solana.FindProgramAddress(
440-
[][]byte{
441-
[]byte("data"), // Seed 1
442-
buf, // Seed 2 (test_idx)
443-
},
444-
solana.MustPublicKeyFromBase58(programPubKey), // The program ID
445-
)
446-
require.NoError(t, err)
447-
448-
fmt.Printf("Derived PDA in test: %s\n", data.String())
449-
450416
SubmitTransactionToCW(t, &it, cw, "initialize", args, types.BoundContract{Name: AnyContractName, Address: h.programID.String()}, types.Finalized)
451-
452-
// inst, err := contract.NewInitializeInstruction(nonce*value, value, data, payer, solana.SystemProgramID).ValidateAndBuild()
453-
// require.NoError(t, err)
454-
455-
// h.sendInstruction(t, inst, signerFunc, payer)
456-
}
457-
458-
func (h *helper) sendInstruction(
459-
t *testing.T,
460-
inst *contract.Instruction,
461-
signerFunc func(key solana.PublicKey) *solana.PrivateKey,
462-
payer solana.PublicKey,
463-
) {
464-
t.Helper()
465-
466-
ctx := tests.Context(t)
467-
468-
recent, err := h.rpcClient.GetLatestBlockhash(ctx, rpc.CommitmentFinalized)
469-
require.NoError(t, err)
470-
471-
tx, err := solana.NewTransaction(
472-
[]solana.Instruction{
473-
inst,
474-
},
475-
recent.Value.Blockhash,
476-
solana.TransactionPayer(payer),
477-
)
478-
require.NoError(t, err)
479-
480-
_, err = tx.EncodeTree(text.NewTreeEncoder(io.Discard, "Initialize"))
481-
require.NoError(t, err)
482-
483-
_, err = tx.Sign(signerFunc)
484-
require.NoError(t, err)
485-
486-
sig, err := h.rpcClient.SendTransactionWithOpts(
487-
ctx, tx,
488-
rpc.TransactionOpts{
489-
PreflightCommitment: rpc.CommitmentConfirmed,
490-
},
491-
)
492-
require.NoError(t, err)
493-
494-
h.waitForTX(t, sig, rpc.CommitmentFinalized)
495-
}
496-
497-
func (h *helper) waitForTX(t *testing.T, sig solana.Signature, commitment rpc.CommitmentType) {
498-
t.Helper()
499-
500-
sub, err := h.wsClient.SignatureSubscribe(
501-
sig,
502-
commitment,
503-
)
504-
require.NoError(t, err)
505-
506-
defer sub.Unsubscribe()
507-
508-
res, err := sub.Recv()
509-
require.NoError(t, err)
510-
511-
if res.Value.Err != nil {
512-
t.Logf("transaction confirmation failed: %v", res.Value.Err)
513-
t.FailNow()
514-
}
515417
}
516418

517419
const programPubKey = "6AfuXF6HapDUhQfE4nQG9C1SGtA1YjP3icaJyRfU4RyE"

pkg/solana/txm/txm.go

-13
Original file line numberDiff line numberDiff line change
@@ -253,24 +253,11 @@ func (txm *Txm) buildTx(ctx context.Context, msg pendingTx, retryCount int) (sol
253253
if err != nil {
254254
return solanaGo.Transaction{}, fmt.Errorf("error in Sign: %w", err)
255255
}
256-
fmt.Printf("Transaction Message (hex): %x\n", txMsg)
257256

258257
var finalSig [64]byte
259258
copy(finalSig[:], sigBytes)
260259
newTx.Signatures = append(newTx.Signatures, finalSig)
261260

262-
for i, sig := range newTx.Signatures {
263-
fmt.Printf("Signature[%d]: %x\n", i, sig)
264-
}
265-
266-
for i, account := range newTx.Message.AccountKeys {
267-
writable, err := newTx.Message.IsWritable(account)
268-
if err != nil {
269-
return solanaGo.Transaction{}, fmt.Errorf("error in IsWritable: %w", err)
270-
}
271-
fmt.Printf("Account[%d]: %s (Signer: %v, Writable: %v)\n", i, account, newTx.Message.IsSigner(account), writable)
272-
}
273-
274261
return newTx, nil
275262
}
276263

0 commit comments

Comments
 (0)