55 "fmt"
66 "math/big"
77 "testing"
8- "time"
98
109 "github.com/stretchr/testify/assert"
1110 "github.com/stretchr/testify/require"
@@ -73,8 +72,8 @@ func Test_runSecureMintWorkflow(t *testing.T) {
7372 require .NoError (t , err )
7473
7574 // create the test trigger event in the format expected by the secure mint transmitter
76- mintableAmount := int64 (99 )
77- blockNumber := int64 (10 )
75+ mintableAmount := big . NewInt (99 )
76+ blockNumber := uint64 (10 )
7877 triggerEvent := createSecureMintTriggerEvent (t , chainID , seqNr , mintableAmount , blockNumber )
7978
8079 t .Logf ("Sending triggerEvent: %+v" , triggerEvent )
@@ -93,14 +92,14 @@ func Test_runSecureMintWorkflow(t *testing.T) {
9392 blockNumber : blockNumber ,
9493 },
9594 }
96- h := newSecureMintHandler (expectedUpdates , uint32 (time . Now (). Unix ()))
95+ h := newSecureMintHandler (expectedUpdates , uint32 (blockNumber )) // TODO(gg): the sm aggregator uses the block number as timestamp, not sure if we want that
9796 waitForConsumerReports (t , consumer , h )
9897}
9998
10099type secureMintUpdate struct {
101100 feedID string
102- mintableAmount int64
103- blockNumber int64
101+ mintableAmount * big. Int
102+ blockNumber uint64
104103}
105104
106105// chainSelector is mimicked after the por plugin, which mimics it from the chain-selectors repo
@@ -137,7 +136,7 @@ type secureMintReport struct {
137136// } // this is sent to trigger subscribers
138137//
139138// ```
140- func createSecureMintTriggerEvent (t * testing.T , chainID chainSelector , seqNr uint64 , mintable int64 , blockNumber int64 ) * values.Map {
139+ func createSecureMintTriggerEvent (t * testing.T , chainID chainSelector , seqNr uint64 , mintable * big. Int , blockNumber uint64 ) * values.Map {
141140 // Create mock signatures (in a real scenario, these would be actual OCR signatures)
142141 sigs := []commoncap.OCRAttributedOnchainSignature {
143142 {
@@ -154,8 +153,8 @@ func createSecureMintTriggerEvent(t *testing.T, chainID chainSelector, seqNr uin
154153 secureMintReport := & secureMintReport {
155154 ConfigDigest : ocr2types .ConfigDigest (configDigest ),
156155 SeqNr : seqNr ,
157- Block : uint64 ( blockNumber ) ,
158- Mintable : big . NewInt ( mintable ) ,
156+ Block : blockNumber ,
157+ Mintable : mintable ,
159158 }
160159
161160 reportBytes , err := json .Marshal (secureMintReport )
@@ -221,17 +220,30 @@ func (h *secureMintHandler) handleFeedReceived(t *testing.T, event *feeds_consum
221220
222221 require .NotNil (t , expectedUpdate , "feedID %s not found in expected updates" , feedIDStr )
223222
223+ mintableMask := new (big.Int ).Sub (new (big.Int ).Lsh (big .NewInt (1 ), 128 ), big .NewInt (1 ))
224+ extractedMintable := new (big.Int ).And (event .Price , mintableMask )
225+ t .Logf ("extractedMintable: %d" , extractedMintable )
226+ assert .Equalf (t , expectedUpdate .mintableAmount , extractedMintable , "mintable amount mismatch: expected %d, got %d" , expectedUpdate .mintableAmount , extractedMintable )
227+
228+ // Extract block number from bits 128-191
229+ blockNumberMask := new (big.Int ).Lsh (new (big.Int ).Sub (new (big.Int ).Lsh (big .NewInt (1 ), 64 ), big .NewInt (1 )), 128 )
230+ extractedBlockNumber := new (big.Int ).And (event .Price , blockNumberMask )
231+ extractedBlockNumber = new (big.Int ).Rsh (extractedBlockNumber , 128 )
232+ t .Logf ("extractedBlockNumber: %d" , extractedBlockNumber )
233+
234+ assert .Equalf (t , expectedUpdate .blockNumber , extractedBlockNumber .Uint64 (), "block number mismatch: expected %d, got %d" , expectedUpdate .blockNumber , extractedBlockNumber .Uint64 ())
235+
224236 // Verify the decimal value
225237 // the block number and mintables are packed into a single uint224 for evm as follows:
226238 // (top 32 - not used / middle 64 - block number / lower 128 - mintable amount)
227239 // unpack first and then assert
228- price := big .NewInt (0 ).SetBytes (event .Price .Bytes ())
229- price .Rsh (price , 192 )
230- assert .Equalf (t , expectedUpdate .mintableAmount , price .Int64 (), "mintable amount mismatch: expected %d, got %d" , expectedUpdate .mintableAmount , price .Int64 ())
240+ // price := big.NewInt(0).SetBytes(event.Price.Bytes())
241+ // price.Rsh(price, 192)
242+ // assert.Equalf(t, expectedUpdate.mintableAmount, price.Int64(), "mintable amount mismatch: expected %d, got %d", expectedUpdate.mintableAmount, price.Int64())
231243
232- blockNumber := big .NewInt (0 ).SetBytes (event .Price .Bytes ())
233- blockNumber .Rsh (blockNumber , 128 )
234- assert .Equalf (t , expectedUpdate .blockNumber , blockNumber .Int64 (), "block number mismatch: expected %d, got %d" , expectedUpdate .blockNumber , blockNumber .Int64 ())
244+ // blockNumber := big.NewInt(0).SetBytes(event.Price.Bytes())
245+ // blockNumber.Rsh(blockNumber, 128)
246+ // assert.Equalf(t, expectedUpdate.blockNumber, blockNumber.Int64(), "block number mismatch: expected %d, got %d", expectedUpdate.blockNumber, blockNumber.Int64())
235247
236248 assert .Equalf (t , h .ts , event .Timestamp , "timestamp mismatch: expected %d, got %d" , h .ts , event .Timestamp )
237249
0 commit comments