Skip to content

Commit

Permalink
Add Sia
Browse files Browse the repository at this point in the history
  • Loading branch information
pouya-eghbali committed Mar 27, 2024
1 parent a7f24ca commit f48e695
Show file tree
Hide file tree
Showing 16 changed files with 352 additions and 300 deletions.
1 change: 0 additions & 1 deletion src/constants/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package constants
import "errors"

var (
ErrInvalidPacket = errors.New("packet.invalid")
ErrCantSendPacket = errors.New("socket.unreachable")
ErrInvalidKosk = errors.New("kosk.invalid")
ErrInvalidConfig = errors.New("conf.invalid")
Expand Down
71 changes: 8 additions & 63 deletions src/consumers/consumers.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,14 @@ import (
"github.com/KenshiTech/unchained/plugins/logs"
"github.com/KenshiTech/unchained/plugins/uniswap"
"github.com/gorilla/websocket"
"github.com/vmihailenco/msgpack/v5"

sia "github.com/pouya-eghbali/go-sia/v2/pkg"
)

// TODO: These functions share a huge chunk of code
func ConsumePriceReport(message []byte) {
var packet datasets.BroadcastPricePacket
err := msgpack.Unmarshal(message, &packet)
if err != nil {
log.Logger.
With("Error", err).
Error("Unmarshal error")

return
}

toHash, err := msgpack.Marshal(&packet.Info)

if err != nil {
log.Logger.
With("Error", err).
Error("Marshal error")

return
}

packet := new(datasets.BroadcastPricePacket).DeSia(&sia.Sia{Content: message})
toHash := packet.Info.Sia().Content
hash, err := bls.Hash(toHash)

if err != nil {
Expand Down Expand Up @@ -66,27 +49,8 @@ func ConsumePriceReport(message []byte) {
}

func ConsumeEventLog(message []byte) {
var packet datasets.BroadcastEventPacket
err := msgpack.Unmarshal(message, &packet)

if err != nil {
log.Logger.
With("Error", err).
Error("Unmarshal error")

return
}

toHash, err := msgpack.Marshal(&packet.Info)

if err != nil {
log.Logger.
With("Error", err).
Error("Marshal error")

return
}

packet := new(datasets.BroadcastEventPacket).DeSia(&sia.Sia{Content: message})
toHash := packet.Info.Sia().Content
hash, err := bls.Hash(toHash)

if err != nil {
Expand Down Expand Up @@ -118,27 +82,8 @@ func ConsumeEventLog(message []byte) {
}

func ConsumeCorrectnessReport(message []byte) {
var packet datasets.BroadcastCorrectnessPacket
err := msgpack.Unmarshal(message, &packet)

if err != nil {
log.Logger.
With("Error", err).
Error("Unmarshal error")

return
}

toHash, err := msgpack.Marshal(&packet.Info)

if err != nil {
log.Logger.
With("Error", err).
Error("Marshal error")

return
}

packet := new(datasets.BroadcastCorrectnessPacket).DeSia(&sia.Sia{Content: message})
toHash := packet.Info.Sia().Content
hash, err := bls.Hash(toHash)

if err != nil {
Expand Down
13 changes: 0 additions & 13 deletions src/crypto/bls/bls.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,6 @@ import (
bls12381_fr "github.com/consensys/gnark-crypto/ecc/bls12-381/fr"
)

type Signer struct {
Name string
EvmWallet string
PublicKey [96]byte
ShortPublicKey [48]byte
}

type Signature struct {
Signature bls12381.G1Affine
Signer Signer
Processed bool
}

var (
g2Aff bls12381.G2Affine
g1Aff bls12381.G1Affine
Expand Down
5 changes: 3 additions & 2 deletions src/crypto/bls/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/KenshiTech/unchained/address"
"github.com/KenshiTech/unchained/config"
"github.com/KenshiTech/unchained/datasets"
"github.com/KenshiTech/unchained/log"

"github.com/btcsuite/btcutil/base58"
Expand All @@ -16,7 +17,7 @@ import (
var ClientSecretKey *big.Int
var ClientPublicKey *bls12381.G2Affine
var ClientShortPublicKey *bls12381.G1Affine
var ClientSigner Signer
var ClientSigner datasets.Signer

func saveConfig() {
pkBytes := ClientPublicKey.Bytes()
Expand Down Expand Up @@ -66,7 +67,7 @@ func InitClientIdentity() {
pkBytes := ClientPublicKey.Bytes()
addrStr := address.Calculate(pkBytes[:])

ClientSigner = Signer{
ClientSigner = datasets.Signer{
Name: config.Config.GetString("name"),
EvmWallet: config.Secrets.GetString("evmwallet"),
PublicKey: ClientPublicKey.Bytes(),
Expand Down
56 changes: 56 additions & 0 deletions src/datasets/bls.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package datasets

import (
bls12381 "github.com/consensys/gnark-crypto/ecc/bls12-381"
sia "github.com/pouya-eghbali/go-sia/v2/pkg"
)

type Signer struct {
Name string
EvmWallet string
PublicKey [96]byte
ShortPublicKey [48]byte
}

type Signature struct {
Signature bls12381.G1Affine
Signer Signer
Processed bool
}

func (s *Signature) Sia() *sia.Sia {
return new(sia.Sia).
AddByteArray8(s.Signature.Marshal()).
EmbedSia(s.Signer.Sia()).
AddBool(s.Processed)
}

func (s *Signature) DeSia(sia *sia.Sia) *Signature {
err := s.Signature.Unmarshal(sia.ReadByteArray8())

if err != nil {
s.Signature = bls12381.G1Affine{}
}

s.Signer.DeSia(sia)
s.Processed = sia.ReadBool()

return s
}

func (s *Signer) Sia() *sia.Sia {
return new(sia.Sia).
AddString8(s.Name).
AddString8(s.EvmWallet).
AddByteArray8(s.PublicKey[:]).
AddByteArray8(s.ShortPublicKey[:])
}

func (s *Signer) DeSia(sia *sia.Sia) *Signer {
s.Name = sia.ReadString8()
s.EvmWallet = sia.ReadString8()
copy(s.PublicKey[:], sia.ReadByteArray8())
copy(s.ShortPublicKey[:], sia.ReadByteArray8())

return s
}
49 changes: 47 additions & 2 deletions src/datasets/correctness.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package datasets

import (
"github.com/KenshiTech/unchained/crypto/bls"
sia "github.com/pouya-eghbali/go-sia/v2/pkg"
)

type Correctness struct {
Expand All @@ -19,5 +19,50 @@ type CorrectnessReport struct {
type BroadcastCorrectnessPacket struct {
Info Correctness
Signature [48]byte
Signer bls.Signer
Signer Signer
}

func (c *Correctness) Sia() *sia.Sia {
return new(sia.Sia).
AddUInt64(c.Timestamp).
AddByteArray8(c.Hash[:]).
AddByteArray8(c.Topic[:]).
AddBool(c.Correct)
}

func (c *Correctness) DeSia(sia *sia.Sia) *Correctness {
c.Timestamp = sia.ReadUInt64()
copy(c.Hash[:], sia.ReadByteArray8())
copy(c.Topic[:], sia.ReadByteArray8())
c.Correct = sia.ReadBool()

return c
}

func (c *CorrectnessReport) Sia() *sia.Sia {
return new(sia.Sia).
EmbedSia(c.Correctness.Sia()).
AddByteArray8(c.Signature[:])
}

func (c *CorrectnessReport) DeSia(sia *sia.Sia) *CorrectnessReport {
c.Correctness.DeSia(sia)
copy(c.Signature[:], sia.ReadByteArray8())

return c
}

func (b *BroadcastCorrectnessPacket) Sia() *sia.Sia {
return new(sia.Sia).
EmbedSia(b.Info.Sia()).
AddByteArray8(b.Signature[:]).
EmbedSia(b.Signer.Sia())
}

func (b *BroadcastCorrectnessPacket) DeSia(sia *sia.Sia) *BroadcastCorrectnessPacket {
b.Info.DeSia(sia)
copy(b.Signature[:], sia.ReadByteArray8())
b.Signer.DeSia(sia)

return b
}
91 changes: 67 additions & 24 deletions src/datasets/logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ package datasets
import (
"encoding/json"

"github.com/KenshiTech/unchained/crypto/bls"
"github.com/vmihailenco/msgpack/v5"
sia "github.com/pouya-eghbali/go-sia/v2/pkg"
)

type EventLogArg struct {
Expand All @@ -13,27 +12,6 @@ type EventLogArg struct {
Value any `json:"Value"`
}

var _ msgpack.CustomEncoder = (*EventLogArg)(nil)

// TODO: this can be improved
func (eventLog *EventLogArg) EncodeMsgpack(enc *msgpack.Encoder) error {
encoded, err := json.Marshal(eventLog)
if err != nil {
return err
}
return enc.EncodeBytes(encoded)
}

var _ msgpack.CustomDecoder = (*EventLogArg)(nil)

func (eventLog *EventLogArg) DecodeMsgpack(dec *msgpack.Decoder) error {
bytes, err := dec.DecodeBytes()
if err != nil {
return err
}
return json.Unmarshal(bytes, eventLog)
}

type EventLog struct {
LogIndex uint64
Block uint64
Expand All @@ -52,5 +30,70 @@ type EventLogReport struct {
type BroadcastEventPacket struct {
Info EventLog
Signature [48]byte
Signer bls.Signer
Signer Signer
}

func (e *EventLog) Sia() *sia.Sia {
argsEncoded, err := json.Marshal(e.Args)

if err != nil {
panic(err)
}

sia := new(sia.Sia).
AddUInt64(e.LogIndex).
AddUInt64(e.Block).
AddString8(e.Address).
AddString8(e.Event).
AddString8(e.Chain).
AddByteArray8(e.TxHash[:]).
AddByteArray16(argsEncoded)

return sia
}

func (e *EventLog) DeSia(sia *sia.Sia) *EventLog {
e.LogIndex = sia.ReadUInt64()
e.Block = sia.ReadUInt64()
e.Address = sia.ReadString8()
e.Event = sia.ReadString8()
e.Chain = sia.ReadString8()
copy(e.TxHash[:], sia.ReadByteArray8())

argsEncoded := sia.ReadByteArray16()
err := json.Unmarshal(argsEncoded, &e.Args)

if err != nil {
panic(err)
}

return e
}

func (e *EventLogReport) Sia() *sia.Sia {
return new(sia.Sia).
EmbedSia(e.EventLog.Sia()).
AddByteArray8(e.Signature[:])
}

func (e *EventLogReport) DeSia(sia *sia.Sia) *EventLogReport {
e.EventLog.DeSia(sia)
copy(e.Signature[:], sia.ReadByteArray8())

return e
}

func (b *BroadcastEventPacket) Sia() *sia.Sia {
return new(sia.Sia).
EmbedSia(b.Info.Sia()).
AddByteArray8(b.Signature[:]).
EmbedSia(b.Signer.Sia())
}

func (b *BroadcastEventPacket) DeSia(sia *sia.Sia) *BroadcastEventPacket {
b.Info.DeSia(sia)
copy(b.Signature[:], sia.ReadByteArray8())
b.Signer.DeSia(sia)

return b
}
Loading

0 comments on commit f48e695

Please sign in to comment.