Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ require (
github.com/smartcontractkit/chain-selectors v1.0.100
github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260528204832-58c7145c53f8
github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4
github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260602131523-5168ac1ba014
github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260603162809-d3f4a3c7b58a
github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b
github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b
github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 11 additions & 2 deletions pkg/capabilities/v2/chain-capabilities/solana/client.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 33 additions & 6 deletions pkg/chains/solana/proto_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,29 @@ func ConvertGetAccountInfoOptsToProto(o *solana.GetAccountInfoOpts) *GetAccountI
}
}

func ConvertGetAccountInfoRequestFromProto(p *GetAccountInfoWithOptsRequest) (solana.GetAccountInfoRequest, error) {
if p == nil {
return solana.GetAccountInfoRequest{}, fmt.Errorf("nil GetAccountInfoWithOptsRequest")
}
addr, err := ConvertPublicKeyFromProto(p.GetAccount())
if err != nil {
return solana.GetAccountInfoRequest{}, err
}
return solana.GetAccountInfoRequest{
Account: addr,
Opts: ConvertGetAccountInfoOptsFromProto(p.GetOpts()),
IsExternal: p.GetIsExternal(),
}, nil
}

func ConvertGetAccountInfoRequestToProto(r solana.GetAccountInfoRequest) *GetAccountInfoWithOptsRequest {
return &GetAccountInfoWithOptsRequest{
Account: r.Account[:],
Opts: ConvertGetAccountInfoOptsToProto(r.Opts),
IsExternal: r.IsExternal,
}
}

func ConvertGetMultipleAccountsOptsFromProto(p *GetMultipleAccountsOpts) *solana.GetMultipleAccountsOpts {
if p == nil {
return nil
Expand Down Expand Up @@ -825,11 +848,11 @@ func ConvertGetTransactionRequestFromProto(p *GetTransactionRequest) (solana.Get
if err != nil {
return solana.GetTransactionRequest{}, err
}
return solana.GetTransactionRequest{Signature: sig}, nil
return solana.GetTransactionRequest{Signature: sig, IsExternal: p.GetIsExternal()}, nil
}

func ConvertGetTransactionRequestToProto(r solana.GetTransactionRequest) *GetTransactionRequest {
return &GetTransactionRequest{Signature: r.Signature[:]}
return &GetTransactionRequest{Signature: r.Signature[:], IsExternal: r.IsExternal}
}

func ConvertGetBalanceReplyFromProto(p *GetBalanceReply) *solana.GetBalanceReply {
Expand Down Expand Up @@ -996,8 +1019,9 @@ func ConvertGetMultipleAccountsRequestFromProto(p *GetMultipleAccountsWithOptsRe
}
accts, _ := ConvertPublicKeysFromProto(p.Accounts)
return &solana.GetMultipleAccountsRequest{
Accounts: accts,
Opts: ConvertGetMultipleAccountsOptsFromProto(p.Opts),
Accounts: accts,
Opts: ConvertGetMultipleAccountsOptsFromProto(p.Opts),
IsExternal: p.GetIsExternal(),
}
}

Expand All @@ -1006,8 +1030,9 @@ func ConvertGetMultipleAccountsRequestToProto(r *solana.GetMultipleAccountsReque
return nil
}
return &GetMultipleAccountsWithOptsRequest{
Accounts: ConvertPublicKeysToProto(r.Accounts),
Opts: ConvertGetMultipleAccountsOptsToProto(r.Opts),
Accounts: ConvertPublicKeysToProto(r.Accounts),
Opts: ConvertGetMultipleAccountsOptsToProto(r.Opts),
IsExternal: r.IsExternal,
}
}

Expand Down Expand Up @@ -1150,6 +1175,7 @@ func ConvertSimulateTXRequestFromProto(p *SimulateTXRequest) (solana.SimulateTXR
Receiver: recv,
EncodedTransaction: p.EncodedTransaction,
Opts: ConvertSimulateTXOptsFromProto(p.Opts),
IsExternal: p.GetIsExternal(),
}, nil
}

Expand All @@ -1158,6 +1184,7 @@ func ConvertSimulateTXRequestToProto(r solana.SimulateTXRequest) *SimulateTXRequ
Receiver: r.Receiver[:],
EncodedTransaction: r.EncodedTransaction,
Opts: ConvertSimulateTXOptsToProto(r.Opts),
IsExternal: r.IsExternal,
}
}

Expand Down
67 changes: 67 additions & 0 deletions pkg/chains/solana/proto_helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,73 @@ func TestGetSignatureStatusesConverters(t *testing.T) {
require.Equal(t, conv.ConfirmationStatusType_CONFIRMATION_STATUS_TYPE_CONFIRMED, rep2.Results[0].ConfirmationStatus)
}

func TestExternalRequestProtoRoundTrip(t *testing.T) {
t.Run("GetAccountInfoRequest", func(t *testing.T) {
pk := typesolana.PublicKey{}
copy(pk[:], mkBytes(typesolana.PublicKeyLength, 0xAB))
d := typesolana.GetAccountInfoRequest{
Account: pk,
Opts: &typesolana.GetAccountInfoOpts{
Encoding: typesolana.EncodingBase64,
Commitment: typesolana.CommitmentFinalized,
},
IsExternal: true,
}
pb := conv.ConvertGetAccountInfoRequestToProto(d)
got, err := conv.ConvertGetAccountInfoRequestFromProto(pb)
require.NoError(t, err)
require.Equal(t, d, got)
})

t.Run("GetMultipleAccountsRequest", func(t *testing.T) {
d := &typesolana.GetMultipleAccountsRequest{
Accounts: []typesolana.PublicKey{
{1},
func() (pk typesolana.PublicKey) { copy(pk[:], mkBytes(typesolana.PublicKeyLength, 0xCD)); return pk }(),
},
Opts: &typesolana.GetMultipleAccountsOpts{
Encoding: typesolana.EncodingJSONParsed,
Commitment: typesolana.CommitmentProcessed,
},
IsExternal: true,
}
pb := conv.ConvertGetMultipleAccountsRequestToProto(d)
got := conv.ConvertGetMultipleAccountsRequestFromProto(pb)
require.Equal(t, d.Accounts[0], got.Accounts[0])
require.Equal(t, d.Accounts[1], got.Accounts[1])
require.Equal(t, d.IsExternal, got.IsExternal)
require.Equal(t, d.Opts, got.Opts)
})

t.Run("GetTransactionRequest", func(t *testing.T) {
var sig typesolana.Signature
copy(sig[:], mkBytes(typesolana.SignatureLength, 0xEF))
d := typesolana.GetTransactionRequest{Signature: sig, IsExternal: true}
pb := conv.ConvertGetTransactionRequestToProto(d)
got, err := conv.ConvertGetTransactionRequestFromProto(pb)
require.NoError(t, err)
require.Equal(t, d, got)
})

t.Run("SimulateTXRequest", func(t *testing.T) {
var recv typesolana.PublicKey
copy(recv[:], mkBytes(typesolana.PublicKeyLength, 0x11))
d := typesolana.SimulateTXRequest{
Receiver: recv,
EncodedTransaction: "txdata",
Opts: &typesolana.SimulateTXOpts{
SigVerify: true,
Commitment: typesolana.CommitmentConfirmed,
},
IsExternal: true,
}
pb := conv.ConvertSimulateTXRequestToProto(d)
got, err := conv.ConvertSimulateTXRequestFromProto(pb)
require.NoError(t, err)
require.Equal(t, d, got)
})
}

func TestErrorJoinBehavior_PublicKeys(t *testing.T) {
in := [][]byte{
mkBytes(typesolana.PublicKeyLength-1, 0x01),
Expand Down
Loading
Loading