Skip to content
37 changes: 37 additions & 0 deletions common/utils/crypto.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package utils

import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/pkg/errors"
"github.com/shutter-network/shutter/shlib/shcrypto"
)

func ComputeIdentity(prefix []byte, sender common.Address) []byte {
imageBytes := append(prefix, sender.Bytes()...)
return imageBytes
}

func DecryptTransaction(key []byte, encrypted []byte) (*types.Transaction, error) {
decryptionKey := new(shcrypto.EpochSecretKey)
err := decryptionKey.Unmarshal(key)
if err != nil {
return nil, errors.Wrapf(err, "invalid decryption key")
}
encryptedMsg := new(shcrypto.EncryptedMessage)
err = encryptedMsg.Unmarshal(encrypted)
if err != nil {
return nil, errors.Wrapf(err, "invalid encrypted msg")
}
decryptedMsg, err := encryptedMsg.Decrypt(decryptionKey)
if err != nil {
return nil, errors.Wrapf(err, "failed to decrypt message")
}

tx := new(types.Transaction)
err = tx.UnmarshalBinary(decryptedMsg)
if err != nil {
return nil, errors.Wrapf(err, "Failed to unmarshal decrypted message to transaction type")
}
return tx, nil
}
176 changes: 170 additions & 6 deletions internal/data/metrics.sql.go

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

2 changes: 1 addition & 1 deletion internal/data/models.sqlc.gen.go

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

48 changes: 46 additions & 2 deletions internal/data/sql/queries/metrics.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- name: CreateTransactionSubmittedEvent :exec
-- name: CreateTransactionSubmittedEvent :one
INSERT into transaction_submitted_event (
event_block_hash,
event_block_number,
Expand All @@ -12,7 +12,8 @@ INSERT into transaction_submitted_event (
event_tx_hash
)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
ON CONFLICT DO NOTHING;
ON CONFLICT DO NOTHING
RETURNING id;

-- name: CreateDecryptionKeyMessages :exec
WITH data (slot, instance_id, eon, tx_pointer) AS (
Expand Down Expand Up @@ -183,3 +184,46 @@ SET block_hash = $1, block_number = $2;

-- name: QueryTransactionSubmittedEventsSyncedUntil :one
SELECT block_hash, block_number FROM transaction_submitted_events_synced_until LIMIT 1;

-- name: QueryTranasctionSubmittedEventIDsUsingBlock :many
SELECT id FROM transaction_submitted_event WHERE event_block_number >= $1; ;

-- name: SetTransactionSubmittedEventIDsNullForDecryptedTX :exec
UPDATE decrypted_tx
SET transaction_submitted_event_id = NULL
WHERE transaction_submitted_event_id = ANY($1::bigint[]);


-- name: DeleteTransactionSubmittedEventFromBlockNumber :exec
DELETE FROM transaction_submitted_event WHERE event_block_number >= $1;

-- name: DeleteValidatorRegistrationMessageFromBlockNumber :exec
DELETE FROM validator_registration_message WHERE event_block_number >= $1;

-- name: QueryDecryptionKeyAndMessage :many
SELECT
dk.id,
dk.key,
dkm.slot
FROM
decryption_key dk
JOIN
decryption_keys_message_decryption_key dkd ON dk.id = dkd.decryption_key_id
JOIN
decryption_keys_message dkm ON dkm.slot = dkd.decryption_keys_message_slot
WHERE dk.eon = $1 AND dk.identity_preimage = $2;

-- name: QueryDecryptedTX :one
SELECT * FROM decrypted_tx WHERE decryption_key_id = $1 AND tx_hash = $2;

-- name: UpdateDecryptedTx :exec
UPDATE decrypted_tx
SET
slot = $2,
tx_index = $3,
tx_hash = $4,
tx_status = $5,
decryption_key_id = $6,
transaction_submitted_event_id = $7,
updated_at = NOW()
WHERE id = $1;
Loading