Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solana offchain plugin #15974

Merged
merged 266 commits into from
Feb 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
266 commits
Select commit Hold shift + click to select a range
4e2f647
cleanup
huangzhen1997 Jan 3, 2025
558c0ff
update
huangzhen1997 Jan 3, 2025
07acdb1
fix mod
huangzhen1997 Jan 3, 2025
0c0b802
update
huangzhen1997 Jan 3, 2025
f0a5a0e
Merge branch 'develop' of github.com:smartcontractkit/chainlink into …
huangzhen1997 Jan 3, 2025
22ad68c
revert mod change
huangzhen1997 Jan 3, 2025
effd030
add changeset
huangzhen1997 Jan 3, 2025
26e9cb3
fix smoke test
huangzhen1997 Jan 3, 2025
b988745
fix lint
huangzhen1997 Jan 3, 2025
56d85d5
revert go mod
huangzhen1997 Jan 3, 2025
75ae059
fix
huangzhen1997 Jan 6, 2025
0272e75
revert
huangzhen1997 Jan 6, 2025
465d69c
revert
huangzhen1997 Jan 6, 2025
f314edc
again
huangzhen1997 Jan 6, 2025
a712c88
update
huangzhen1997 Jan 6, 2025
8c02e8b
remove file
huangzhen1997 Jan 6, 2025
bad1acb
revert
huangzhen1997 Jan 6, 2025
6023de7
update
huangzhen1997 Jan 6, 2025
23d9c80
update
huangzhen1997 Jan 6, 2025
82185a0
update version
huangzhen1997 Jan 6, 2025
8f42923
revert
huangzhen1997 Jan 6, 2025
4fdf7f7
downgrade version
huangzhen1997 Jan 6, 2025
b0b8d31
go mod tidy
huangzhen1997 Jan 6, 2025
85dfafd
tidy
huangzhen1997 Jan 6, 2025
9ec6505
add token indexes
huangzhen1997 Jan 6, 2025
a5b661d
update comment
huangzhen1997 Jan 6, 2025
fea59dc
add solana and remove evm specific
huangzhen1997 Jan 6, 2025
b0e1bf1
add solana config
huangzhen1997 Jan 7, 2025
30dcec6
grammar
huangzhen1997 Jan 7, 2025
ca65513
update go mod
huangzhen1997 Jan 7, 2025
7c65545
go mod
huangzhen1997 Jan 7, 2025
33b0c11
update
huangzhen1997 Jan 7, 2025
cedd67f
update
huangzhen1997 Jan 7, 2025
0034d01
changeset
huangzhen1997 Jan 7, 2025
484f961
update
huangzhen1997 Jan 7, 2025
e79f19e
refactor
huangzhen1997 Jan 7, 2025
c89caa7
update
huangzhen1997 Jan 7, 2025
c0be8d4
refactor
huangzhen1997 Jan 8, 2025
9bdf1ea
update lint
huangzhen1997 Jan 8, 2025
acf9592
fix lint
huangzhen1997 Jan 8, 2025
609e708
add chain reader config to plugin creator
huangzhen1997 Jan 9, 2025
447c093
update changeset
huangzhen1997 Jan 9, 2025
f48bb97
Part 1 for Prashant comments
huangzhen1997 Jan 9, 2025
bde6fa4
refactor getTransmitterKeys
huangzhen1997 Jan 9, 2025
a5d9c65
Merge branch 'develop' into NONEVM-934/add-solana-chainwriter-config
huangzhen1997 Jan 9, 2025
3e78cb8
go mod tidy
huangzhen1997 Jan 9, 2025
df7ef82
minor
huangzhen1997 Jan 9, 2025
c8bb4ac
fix lint
huangzhen1997 Jan 9, 2025
f4735fa
go import
huangzhen1997 Jan 9, 2025
e169af2
Merge branch 'solana-offchain-plugin' into NONEVM-935/implement-ccip-…
huangzhen1997 Jan 9, 2025
a52044d
gomod
huangzhen1997 Jan 9, 2025
66d8e03
Blaž comments
huangzhen1997 Jan 10, 2025
3f4929a
part 1
huangzhen1997 Jan 10, 2025
d5413ae
fix lint
huangzhen1997 Jan 10, 2025
03ae3ee
data type
huangzhen1997 Jan 10, 2025
8786125
add solana home chain merge func
huangzhen1997 Jan 11, 2025
7fddbf8
rephrase
huangzhen1997 Jan 11, 2025
f8ccae3
add entire config from example
huangzhen1997 Jan 13, 2025
18cdd64
rm comments
huangzhen1997 Jan 13, 2025
44d709e
lint
huangzhen1997 Jan 13, 2025
0cdf583
lint
huangzhen1997 Jan 13, 2025
05c1b75
refactor
huangzhen1997 Jan 13, 2025
fbfff6a
update comments
huangzhen1997 Jan 13, 2025
c2a604b
fix lint
huangzhen1997 Jan 13, 2025
6ecbec2
make generate
huangzhen1997 Jan 13, 2025
016f5a6
Add solana support to contract transmitter (#15869)
huangzhen1997 Jan 14, 2025
b85cffd
update version
huangzhen1997 Jan 14, 2025
73b4d0b
go mod
huangzhen1997 Jan 15, 2025
ba6fd47
Merge branch 'solana-offchain-plugin' into NONEVM-933/add-chain-reade…
huangzhen1997 Jan 15, 2025
2ce1b99
go mod tidy
huangzhen1997 Jan 15, 2025
468463c
go mod
huangzhen1997 Jan 15, 2025
b0e3b10
go.md
huangzhen1997 Jan 15, 2025
64758d1
go md
huangzhen1997 Jan 15, 2025
b1423f3
remove hard coded
huangzhen1997 Jan 15, 2025
02d754e
Merge branch 'solana-offchain-plugin' into NONEVM-934/add-solana-chai…
huangzhen1997 Jan 15, 2025
057172d
go.md
huangzhen1997 Jan 15, 2025
a89a392
go import
huangzhen1997 Jan 15, 2025
91f4dca
remove unused
huangzhen1997 Jan 15, 2025
cbb6b93
update mod
huangzhen1997 Jan 16, 2025
67d689c
update with new generated go binding
huangzhen1997 Jan 16, 2025
7f6aa25
Amit comments
huangzhen1997 Jan 16, 2025
d1c5858
Solana estimate providers no-op (#15909)
huangzhen1997 Jan 17, 2025
27c2440
Merge pull request #15876 from smartcontractkit/NONEVM-933/add-chain-…
huangzhen1997 Jan 17, 2025
d107e1a
Merge branch 'solana-offchain-plugin' into NONEVM-934/add-solana-chai…
huangzhen1997 Jan 17, 2025
e9abe63
Merge branch 'solana-offchain-plugin' into NONEVM-935/implement-ccip-…
huangzhen1997 Jan 17, 2025
9497f40
mod tidy
huangzhen1997 Jan 17, 2025
a757a6e
Use SVM ABI, needs to check test
huangzhen1997 Jan 21, 2025
e9ae48d
add comment
huangzhen1997 Jan 21, 2025
7253bba
goimport
huangzhen1997 Jan 21, 2025
0ec8119
update
huangzhen1997 Jan 21, 2025
82a162f
rename
huangzhen1997 Jan 21, 2025
6f7eaf6
Merge branch 'develop' into solana-offchain-plugin
huangzhen1997 Jan 21, 2025
18f578c
go mod tidy
huangzhen1997 Jan 21, 2025
9c4fff2
goimport
huangzhen1997 Jan 21, 2025
2c7bd05
Merge branch 'solana-offchain-plugin' into NONEVM-1163/implement-extr…
huangzhen1997 Jan 21, 2025
e8bbe9a
tidy
huangzhen1997 Jan 21, 2025
36a5ad1
refactor
huangzhen1997 Jan 21, 2025
3fa671b
fix lint
huangzhen1997 Jan 22, 2025
12ee1f4
Merge branch 'solana-offchain-plugin' into NONEVM-935/implement-ccip-…
huangzhen1997 Jan 22, 2025
443cfe1
step 1 for parse extra args map
huangzhen1997 Jan 22, 2025
c60a925
add comment
huangzhen1997 Jan 22, 2025
24e9fa3
fix test
huangzhen1997 Jan 22, 2025
af29932
fix
huangzhen1997 Jan 22, 2025
912b91c
update
huangzhen1997 Jan 22, 2025
03787a8
improvement
huangzhen1997 Jan 22, 2025
25d2acd
update
huangzhen1997 Jan 22, 2025
2597b48
update
huangzhen1997 Jan 22, 2025
48464b0
tidy
huangzhen1997 Jan 22, 2025
a99bdcc
update
huangzhen1997 Jan 22, 2025
6f80799
fix test
huangzhen1997 Jan 22, 2025
58a9497
Matt comments
huangzhen1997 Jan 22, 2025
5fe01d2
address Makram comments
huangzhen1997 Jan 23, 2025
6ea469d
Makram comments part1
huangzhen1997 Jan 23, 2025
fee6bb6
refactor
huangzhen1997 Jan 23, 2025
c49c04b
lint
huangzhen1997 Jan 23, 2025
3c52f32
Merge branch 'develop' into solana-offchain-plugin
huangzhen1997 Jan 23, 2025
a95004c
go mod
huangzhen1997 Jan 23, 2025
0e53261
update
huangzhen1997 Jan 23, 2025
2d79cb0
Merge branch 'solana-offchain-plugin' into NONEVM-935/implement-ccip-…
huangzhen1997 Jan 23, 2025
80496c9
fix
huangzhen1997 Jan 23, 2025
7204973
Merge branch 'solana-offchain-plugin' into NONEVM-1163/implement-extr…
huangzhen1997 Jan 23, 2025
a903310
mod tidy
huangzhen1997 Jan 23, 2025
d856147
go md
huangzhen1997 Jan 23, 2025
80b3e3b
gomd
huangzhen1997 Jan 23, 2025
afcd808
fix import
huangzhen1997 Jan 24, 2025
6bc6b29
fix broken integration test
huangzhen1997 Jan 24, 2025
ed8cd1c
change commit to little endian, to do for execute
huangzhen1997 Jan 24, 2025
a5f84ac
update
huangzhen1997 Jan 24, 2025
1bcb320
use LE
huangzhen1997 Jan 24, 2025
3ec1574
update
huangzhen1997 Jan 24, 2025
2b79eac
update
huangzhen1997 Jan 25, 2025
626a423
update padding
huangzhen1997 Jan 25, 2025
32956a6
fix make
huangzhen1997 Jan 25, 2025
d6af37b
fix test
huangzhen1997 Jan 27, 2025
9779bd2
rename
huangzhen1997 Jan 27, 2025
f9489ae
fix test
huangzhen1997 Jan 27, 2025
cf28c84
update source chain
huangzhen1997 Jan 27, 2025
9822b54
update
huangzhen1997 Jan 27, 2025
12cd5c9
lower case
huangzhen1997 Jan 27, 2025
67e0038
update test
huangzhen1997 Jan 27, 2025
e03c253
goimport
huangzhen1997 Jan 27, 2025
a20765b
minor
huangzhen1997 Jan 27, 2025
85a7640
merge develop
huangzhen1997 Jan 28, 2025
81b30de
tidy
huangzhen1997 Jan 28, 2025
ee10849
merge develop
huangzhen1997 Jan 28, 2025
f2952a0
implement and add test
huangzhen1997 Jan 28, 2025
a1eacf6
update comments
huangzhen1997 Jan 28, 2025
0b15808
goimport
huangzhen1997 Jan 28, 2025
283c4e4
implement dest exec data handling
huangzhen1997 Jan 28, 2025
55b33e3
fix conflicts
huangzhen1997 Jan 28, 2025
1ede47a
fix
huangzhen1997 Jan 29, 2025
d7e246f
fix
huangzhen1997 Jan 29, 2025
3598eaa
merge
huangzhen1997 Jan 29, 2025
3a1b986
fix test
huangzhen1997 Jan 29, 2025
8d4d702
update
huangzhen1997 Jan 29, 2025
8a14890
fix test
huangzhen1997 Jan 29, 2025
fc7f0f7
update
huangzhen1997 Jan 29, 2025
9939559
add comment
huangzhen1997 Jan 29, 2025
30bbb92
merge
huangzhen1997 Jan 29, 2025
23511f3
fix mod
huangzhen1997 Jan 29, 2025
ca2e55c
fix
huangzhen1997 Jan 29, 2025
6e6441d
refactor
huangzhen1997 Jan 29, 2025
4407ec6
refactor
huangzhen1997 Jan 29, 2025
4c386ba
update
huangzhen1997 Jan 29, 2025
7e96d52
update comment
huangzhen1997 Jan 30, 2025
2e8de08
add unit test
huangzhen1997 Jan 30, 2025
5c76148
update
huangzhen1997 Jan 30, 2025
5bcf509
lint
huangzhen1997 Jan 30, 2025
1629fdc
mod
huangzhen1997 Jan 30, 2025
8af2a50
mod tidy
huangzhen1997 Jan 30, 2025
72fbfdb
fix
huangzhen1997 Jan 30, 2025
9e74189
lint
huangzhen1997 Jan 30, 2025
aa9841d
update
huangzhen1997 Jan 30, 2025
32eb010
update
huangzhen1997 Jan 30, 2025
4e86a10
goimport
huangzhen1997 Jan 30, 2025
7100acc
update
huangzhen1997 Jan 30, 2025
57d0294
Merge pull request #16016 from smartcontractkit/NONEVM-1163/implement…
huangzhen1997 Jan 30, 2025
e1cb2d0
Merge branch 'solana-offchain-plugin' into NONEVM-934/add-solana-chai…
huangzhen1997 Jan 30, 2025
a81a9b3
Solana MessageHasher (#15911)
prashantkumar1982 Jan 30, 2025
fd469bb
Merge branch 'solana-offchain-plugin' into NONEVM-935/implement-ccip-…
huangzhen1997 Jan 31, 2025
c088d5c
mod
huangzhen1997 Jan 31, 2025
ff083a4
update
huangzhen1997 Jan 31, 2025
57999be
clean up
huangzhen1997 Jan 31, 2025
6b1a86b
update
huangzhen1997 Jan 31, 2025
96888f6
update
huangzhen1997 Jan 31, 2025
951498b
add on-chain data decoding unit test coverage
huangzhen1997 Jan 31, 2025
38a071c
add comment
huangzhen1997 Jan 31, 2025
0c91600
fix import
huangzhen1997 Jan 31, 2025
7e72097
more test
huangzhen1997 Jan 31, 2025
0589fb8
update
huangzhen1997 Jan 31, 2025
40ea8f7
update
huangzhen1997 Feb 2, 2025
14cf174
fix
huangzhen1997 Feb 2, 2025
7325938
fix import
huangzhen1997 Feb 2, 2025
ae51551
rm unused
huangzhen1997 Feb 2, 2025
97a8278
remove unused
huangzhen1997 Feb 3, 2025
7bdb472
downgrade
huangzhen1997 Feb 3, 2025
59fc6b5
downgrade
huangzhen1997 Feb 3, 2025
7193324
rm
huangzhen1997 Feb 3, 2025
761eb11
update
huangzhen1997 Feb 3, 2025
a8f4eea
update
huangzhen1997 Feb 3, 2025
e04db54
rm
huangzhen1997 Feb 3, 2025
8f5a842
update
huangzhen1997 Feb 3, 2025
bb84f23
revert
huangzhen1997 Feb 3, 2025
d88f48e
revert
huangzhen1997 Feb 3, 2025
a459033
revert
huangzhen1997 Feb 3, 2025
ae09a68
fix
huangzhen1997 Feb 3, 2025
8e50b44
update
huangzhen1997 Feb 3, 2025
02af3d3
fix
huangzhen1997 Feb 3, 2025
333336c
update
huangzhen1997 Feb 3, 2025
6303100
update
huangzhen1997 Feb 3, 2025
fd254e1
mod clean
huangzhen1997 Feb 3, 2025
cd78da0
Merge pull request #15816 from smartcontractkit/NONEVM-935/implement-…
huangzhen1997 Feb 3, 2025
74d2e31
Merge branch 'develop' into solana-offchain-plugin
huangzhen1997 Feb 3, 2025
7c2b7e4
fix
huangzhen1997 Feb 3, 2025
54a4b2b
mod tidy
huangzhen1997 Feb 3, 2025
7120fc2
merge
huangzhen1997 Feb 3, 2025
c729c87
merge
huangzhen1997 Feb 3, 2025
f075c9a
fix
huangzhen1997 Feb 3, 2025
f192539
fix
huangzhen1997 Feb 3, 2025
dee521f
update
huangzhen1997 Feb 3, 2025
a85c87d
fix
huangzhen1997 Feb 4, 2025
b8ac321
update with develop
huangzhen1997 Feb 4, 2025
90de36d
fix
huangzhen1997 Feb 4, 2025
b8ac655
go mod
huangzhen1997 Feb 4, 2025
142817c
update
huangzhen1997 Feb 4, 2025
87a4c3c
update
huangzhen1997 Feb 4, 2025
096c8ba
update
huangzhen1997 Feb 4, 2025
9341a26
Merge branch 'develop' into solana-offchain-plugin
huangzhen1997 Feb 4, 2025
1fed66b
update
huangzhen1997 Feb 4, 2025
8bec69b
update
huangzhen1997 Feb 4, 2025
48a7a1c
merge
huangzhen1997 Feb 4, 2025
158674c
more
huangzhen1997 Feb 4, 2025
5cdf259
update
huangzhen1997 Feb 4, 2025
4e59792
Merge branch 'solana-offchain-plugin' of github.com:smartcontractkit/…
huangzhen1997 Feb 4, 2025
8164820
update
huangzhen1997 Feb 4, 2025
f26416e
mod
huangzhen1997 Feb 4, 2025
8b3fa4e
update
huangzhen1997 Feb 4, 2025
20c3b69
Merge pull request #15848 from smartcontractkit/NONEVM-934/add-solana…
huangzhen1997 Feb 4, 2025
c9fd163
refactor extradata codec
huangzhen1997 Feb 5, 2025
2bd508e
update
huangzhen1997 Feb 5, 2025
e5734b1
goimport
huangzhen1997 Feb 5, 2025
4b7efb1
update
huangzhen1997 Feb 6, 2025
d57b70e
add error
huangzhen1997 Feb 6, 2025
38f47c6
Merge pull request #16223 from smartcontractkit/refactor-extra-data-c…
huangzhen1997 Feb 6, 2025
4ddfd23
Merge branch 'develop' into solana-offchain-plugin
huangzhen1997 Feb 6, 2025
0e235eb
tidy
huangzhen1997 Feb 6, 2025
a0b5e6e
fix import
huangzhen1997 Feb 6, 2025
01677eb
revert previous extra data codec refactor
huangzhen1997 Feb 6, 2025
d7018d4
merge
huangzhen1997 Feb 6, 2025
914328b
fix
huangzhen1997 Feb 6, 2025
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
5 changes: 5 additions & 0 deletions .changeset/mighty-waves-change.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

add solana chain reader config support to plugin creator, remove evm specific code #added
5 changes: 5 additions & 0 deletions .changeset/old-pets-divide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

Add solana chain writer config initialization #added
5 changes: 5 additions & 0 deletions .changeset/rich-frogs-work.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

Adding solana message hasher #added
5 changes: 5 additions & 0 deletions .changeset/twelve-games-sneeze.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

add Solana estimate provider as a no-op #added
5 changes: 5 additions & 0 deletions .changeset/violet-bears-try.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

Solana CCIP plugin codec support for both commit and execute report #added
5 changes: 5 additions & 0 deletions .changeset/wise-items-brush.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

Add solana support for contract transmitter and remove evm depdendency for address encoding #added
4 changes: 2 additions & 2 deletions .github/actions/setup-solana/build-contracts/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ runs:
echo "ANCHOR_VERSION=${anchor}" >> $GITHUB_ENV
- name: cache docker build image
id: cache-image
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4 # v4.0.2
with:
lookup-only: true
path: chains/solana/contracts/docker-build.tar
key: ${{ runner.os }}-solana-build-${{ env.ANCHOR_VERSION }}-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo target dir
id: cache-target
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4 # v4.0.2
with:
lookup-only: true
path: chains/solana/contracts/target
Expand Down
56 changes: 56 additions & 0 deletions core/capabilities/ccip/ccipevm/extradatadecoder.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package ccipevm

import (
"fmt"

cciptypes "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3"
)

func DecodeDestExecDataToMap(DestExecData cciptypes.Bytes) (map[string]interface{}, error) {
destGasAmount, err := abiDecodeUint32(DestExecData)
if err != nil {
return nil, fmt.Errorf("decode dest gas amount: %w", err)
}

return map[string]interface{}{
evmDestExecDataKey: destGasAmount,
}, nil
}

func DecodeExtraArgsToMap(extraArgs []byte) (map[string]any, error) {
if len(extraArgs) < 4 {
return nil, fmt.Errorf("extra args too short: %d, should be at least 4 (i.e the extraArgs tag)", len(extraArgs))
}

var method string
var extraByteOffset int
switch string(extraArgs[:4]) {
case string(evmExtraArgsV1Tag):
// for EVMExtraArgs, the first four bytes is the method name
method = evmV1DecodeName
extraByteOffset = 4
case string(evmExtraArgsV2Tag):
method = evmV2DecodeName
extraByteOffset = 4
case string(svmExtraArgsV1Tag):
// for SVMExtraArgs there's the four bytes plus another 32 bytes padding for the dynamic array
// TODO this is a temporary solution, the evm on-chain side will fix it, so the offset should just be 4 instead of 36
// https://smartcontract-it.atlassian.net/browse/BCI-4180
method = svmV1DecodeName
extraByteOffset = 36
default:
return nil, fmt.Errorf("unknown extra args tag: %x", extraArgs)
}

output := make(map[string]any)
args := make(map[string]interface{})
err := messageHasherABI.Methods[method].Inputs.UnpackIntoMap(args, extraArgs[extraByteOffset:])
if err != nil {
return nil, fmt.Errorf("abi decode extra args %v: %w", method, err)
}

for k, val := range args {
output[k] = val
}
return output, nil
}
105 changes: 105 additions & 0 deletions core/capabilities/ccip/ccipevm/extradatadecoder_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package ccipevm

import (
"math/big"
"math/rand"
"testing"

"github.com/gagliardetto/solana-go"
"github.com/stretchr/testify/require"

"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/message_hasher"
)

func Test_decodeExtraData(t *testing.T) {
d := testSetup(t)
gasLimit := big.NewInt(rand.Int63())

t.Run("decode extra args into map evm v1", func(t *testing.T) {
encoded, err := d.contract.EncodeEVMExtraArgsV1(nil, message_hasher.ClientEVMExtraArgsV1{
GasLimit: gasLimit,
})
require.NoError(t, err)

m, err := DecodeExtraArgsToMap(encoded)
require.NoError(t, err)
require.Len(t, m, 1)

gl, exist := m["gasLimit"]
require.True(t, exist)
require.Equal(t, gl, gasLimit)
})

t.Run("decode extra args into map evm v2", func(t *testing.T) {
encoded, err := d.contract.EncodeEVMExtraArgsV2(nil, message_hasher.ClientEVMExtraArgsV2{
GasLimit: gasLimit,
AllowOutOfOrderExecution: true,
})
require.NoError(t, err)

m, err := DecodeExtraArgsToMap(encoded)
require.NoError(t, err)
require.Len(t, m, 2)

gl, exist := m["gasLimit"]
require.True(t, exist)
require.Equal(t, gl, gasLimit)

ooe, exist := m["allowOutOfOrderExecution"]
require.True(t, exist)
require.Equal(t, true, ooe)
})

t.Run("decode extra args into map svm", func(t *testing.T) {
key, err := solana.NewRandomPrivateKey()
require.NoError(t, err)
cu := uint32(10000)
bitmap := uint64(4)
ooe := false
tokenReceiver := [32]byte(key.PublicKey().Bytes())
accounts := [][32]byte{[32]byte(key.PublicKey().Bytes())}
decoded, err := d.contract.DecodeSVMExtraArgsV1(nil, cu, bitmap, ooe, tokenReceiver, accounts)
if err != nil {
return
}
encoded, err := d.contract.EncodeSVMExtraArgsV1(nil, decoded)
require.NoError(t, err)

m, err := DecodeExtraArgsToMap(encoded)
require.NoError(t, err)
require.Len(t, m, 5)

cuDecoded, exist := m["computeUnits"]
require.True(t, exist)
require.Equal(t, cuDecoded, cu)

bitmapDecoded, exist := m["accountIsWritableBitmap"]
require.True(t, exist)
require.Equal(t, bitmapDecoded, bitmap)

ooeDecoded, exist := m["allowOutOfOrderExecution"]
require.True(t, exist)
require.Equal(t, ooeDecoded, ooe)

tokenReceiverDecoded, exist := m["tokenReceiver"]
require.True(t, exist)
require.Equal(t, tokenReceiverDecoded, tokenReceiver)

accountsDecoded, exist := m["accounts"]
require.True(t, exist)
require.Equal(t, accountsDecoded, accounts)
})

t.Run("decode dest exec data into map", func(t *testing.T) {
destGasAmount := uint32(10000)
encoded, err := abiEncodeUint32(destGasAmount)
require.NoError(t, err)
m, err := DecodeDestExecDataToMap(encoded)
require.NoError(t, err)
require.Len(t, m, 1)

decoded, exist := m[evmDestExecDataKey]
require.True(t, exist)
require.Equal(t, destGasAmount, decoded)
})
}
11 changes: 9 additions & 2 deletions core/capabilities/ccip/ccipevm/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ import (
"github.com/ethereum/go-ethereum/accounts/abi"
)

const (
svmV1DecodeName = "decodeSVMExtraArgsV1"
evmV1DecodeName = "decodeEVMExtraArgsV1"
evmV2DecodeName = "decodeEVMExtraArgsV2"
evmDestExecDataKey = "destGasAmount"
)

var (
abiUint32 = ABITypeOrPanic("uint32")
TokenDestGasOverheadABI = abi.Arguments{
Expand All @@ -24,9 +31,9 @@ func decodeExtraArgsV1V2(extraArgs []byte) (gasLimit *big.Int, err error) {

var method string
if bytes.Equal(extraArgs[:4], evmExtraArgsV1Tag) {
method = "decodeEVMExtraArgsV1"
method = evmV1DecodeName
} else if bytes.Equal(extraArgs[:4], evmExtraArgsV2Tag) {
method = "decodeEVMExtraArgsV2"
method = evmV2DecodeName
} else {
return nil, fmt.Errorf("unknown extra args tag: %x", extraArgs)
}
Expand Down
35 changes: 35 additions & 0 deletions core/capabilities/ccip/ccipevm/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,39 @@ func Test_decodeExtraArgs(t *testing.T) {

require.Equal(t, gasLimit, decodedGasLimit)
})

t.Run("decode extra args into map evm v1", func(t *testing.T) {
encoded, err := d.contract.EncodeEVMExtraArgsV1(nil, message_hasher.ClientEVMExtraArgsV1{
GasLimit: gasLimit,
})
require.NoError(t, err)

m, err := DecodeExtraArgsToMap(encoded)
require.NoError(t, err)
require.Len(t, m, 1)

gl, exist := m["gasLimit"]
require.True(t, exist)
require.Equal(t, gl, gasLimit)
})

t.Run("decode extra args into map evm v2", func(t *testing.T) {
encoded, err := d.contract.EncodeEVMExtraArgsV2(nil, message_hasher.ClientEVMExtraArgsV2{
GasLimit: gasLimit,
AllowOutOfOrderExecution: true,
})
require.NoError(t, err)

m, err := DecodeExtraArgsToMap(encoded)
require.NoError(t, err)
require.Len(t, m, 2)

gl, exist := m["gasLimit"]
require.True(t, exist)
require.Equal(t, gl, gasLimit)

ooe, exist := m["allowOutOfOrderExecution"]
require.True(t, exist)
require.Equal(t, true, ooe)
})
}
3 changes: 3 additions & 0 deletions core/capabilities/ccip/ccipevm/msghasher.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ var (

// bytes4 public constant EVM_EXTRA_ARGS_V2_TAG = 0x181dcf10;
evmExtraArgsV2Tag = hexutil.MustDecode("0x181dcf10")

// bytes4 public constant SVM_EXTRA_EXTRA_ARGS_V1_TAG = 0x1f3b3aba
svmExtraArgsV1Tag = hexutil.MustDecode("0x1f3b3aba")
)

// MessageHasherV1 implements the MessageHasher interface.
Expand Down
Loading
Loading