Skip to content
This repository was archived by the owner on Sep 6, 2024. It is now read-only.
Open
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
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# Added these ingnores for avail-optimism
cmd-addrs-keys.txt



.DS_Store
node_modules
results
Expand Down
189 changes: 101 additions & 88 deletions README.md

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ require (
)

require (
github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect
github.com/DataDog/zstd v1.5.2 // indirect
github.com/VictoriaMetrics/fastcache v1.10.0 // indirect
github.com/allegro/bigcache v1.2.1 // indirect
Expand All @@ -47,17 +48,21 @@ require (
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/btcsuite/btcd/btcutil v1.1.0 // indirect
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect
github.com/centrifuge/go-substrate-rpc-client/v4 v4.1.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/cockroachdb/errors v1.9.1 // indirect
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 // indirect
github.com/cockroachdb/redact v1.1.3 // indirect
github.com/containerd/cgroups v1.1.0 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
github.com/deckarep/golang-set v1.8.0 // indirect
github.com/deckarep/golang-set/v2 v2.1.0 // indirect
github.com/decred/base58 v1.0.3 // indirect
github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect
github.com/deepmap/oapi-codegen v1.8.2 // indirect
github.com/docker/docker v20.10.24+incompatible // indirect
Expand All @@ -84,6 +89,8 @@ require (
github.com/google/uuid v1.3.0 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/graph-gophers/graphql-go v1.3.0 // indirect
github.com/gtank/merlin v0.1.1 // indirect
github.com/gtank/ristretto255 v0.1.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-bexpr v0.1.11 // indirect
github.com/holiman/bloomfilter/v2 v2.0.3 // indirect
Expand Down Expand Up @@ -118,6 +125,7 @@ require (
github.com/miekg/dns v1.1.50 // indirect
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect
github.com/minio/sha256-simd v1.0.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mitchellh/pointerstructure v1.2.1 // indirect
Expand All @@ -134,6 +142,7 @@ require (
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 // indirect
github.com/pierrec/xxHash v0.1.5 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
github.com/prometheus/common v0.39.0 // indirect
Expand All @@ -157,6 +166,7 @@ require (
github.com/tklauser/go-sysconf v0.3.10 // indirect
github.com/tklauser/numcpus v0.5.0 // indirect
github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/vedhavyas/go-subkey v1.0.3 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
go.uber.org/atomic v1.10.0 // indirect
Expand All @@ -180,4 +190,7 @@ require (

replace github.com/ethereum/go-ethereum v1.11.6 => github.com/ethereum-optimism/op-geth v1.101106.0-rc.2

//To interact with Avail DA
replace github.com/centrifuge/go-substrate-rpc-client/v4 => github.com/availproject/go-substrate-rpc-client/v4 v4.0.12-avail-1.4.0-rc1-5e286e3

//replace github.com/ethereum/go-ethereum v1.11.6 => ../go-ethereum
60 changes: 60 additions & 0 deletions go.sum

Large diffs are not rendered by default.

58 changes: 44 additions & 14 deletions nx.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"defaultBase": "develop",
"defaultBase": "avail-develop",
"affected": {
"defaultBase": "develop"
"defaultBase": "avail-develop"
},
"implicitDependencies": {
"nx.json": "*"
Expand Down Expand Up @@ -30,7 +30,10 @@
"{projectRoot}/tsconfig.json",
"{projectRoot}/package.json"
],
"default": ["{projectRoot}/**/*", "configsWorkspace"],
"default": [
"{projectRoot}/**/*",
"configsWorkspace"
],
"srcGenerated": [
"{projectRoot}/src/contract-artifacts.ts",
"{projectRoot}/src/contract-deployed-artifacts.ts"
Expand All @@ -39,26 +42,48 @@
"{projectRoot}/src/**/*",
"!{projectRoot}/src/**/*.spec.ts"
],
"productionContracts": ["{projectRoot}/contracts/**/*"],
"production": ["productionSrc", "productionContracts"],
"testing": ["configsWorkspace", "default"]
"productionContracts": [
"{projectRoot}/contracts/**/*"
],
"production": [
"productionSrc",
"productionContracts"
],
"testing": [
"configsWorkspace",
"default"
]
},
"targetDefaults": {
"lint": {
"inputs": ["{workspaceRoot}/.markdownlint.json", "default"]
"inputs": [
"{workspaceRoot}/.markdownlint.json",
"default"
]
},
"test": {
"inputs": ["default", "testing", "^production"],
"dependsOn": ["^build"]
"inputs": [
"default",
"testing",
"^production"
],
"dependsOn": [
"^build"
]
},
"build:contracts": {
"inputs": [
"configsProject",
"productionContracts",
"^productionContracts"
],
"dependsOn": ["^build"],
"outputs": ["{projectRoot}/artifacts", "{projectRoot}/forge-artifacts"]
"dependsOn": [
"^build"
],
"outputs": [
"{projectRoot}/artifacts",
"{projectRoot}/forge-artifacts"
]
},
"build": {
"inputs": [
Expand All @@ -67,8 +92,13 @@
"production",
"^production"
],
"dependsOn": ["^build", "build:contracts"],
"outputs": ["{projectRoot}/dist"]
"dependsOn": [
"^build",
"build:contracts"
],
"outputs": [
"{projectRoot}/dist"
]
}
}
}
}
1 change: 1 addition & 0 deletions op-avail/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
config.json
26 changes: 26 additions & 0 deletions op-avail/avail/getTxDataByDARef.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package avail

import (
"fmt"

service "github.com/ethereum-optimism/optimism/op-avail/internal/services"
types "github.com/ethereum-optimism/optimism/op-avail/internal/types"
"github.com/ethereum/go-ethereum/log"
)

func GetTxDataByDARef(RefData []byte, l log.Logger) ([]byte, error) {
//Getting Avail block reference from callData
avail_blk_ref := types.AvailBlockRef{}
err := avail_blk_ref.UnmarshalFromBinary(RefData)
if err != nil {
return []byte{}, fmt.Errorf("Failed to unmarshal the ethereum trxn data to avail block refrence, error:%v", err)
}
l.Info("Avail Block Reference:", "Ref", avail_blk_ref)

txData, err := service.GetBlockExtrinsicData(avail_blk_ref, l)
if err != nil {
return []byte{}, fmt.Errorf("Failed to get block extrinsic data, error:%v", err)
}

return txData, nil
}
32 changes: 32 additions & 0 deletions op-avail/avail/submitTxDataAndGetRef.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package avail

import (
"fmt"

service "github.com/ethereum-optimism/optimism/op-avail/internal/services"
"github.com/ethereum/go-ethereum/log"
)

func SubmitTxDataAndGetRef(TxData []byte, l log.Logger) ([]byte, error) {
l.Info("Working on batch submission for avail")

//Checking for the size of TxData
if len(TxData) >= 512000 {
return []byte{}, fmt.Errorf("size of TxData is more than 512KB, it is higher than a single data submit transaction supports on avail")
}

// Submitting data to Avail
avail_Blk_Ref, err := service.SubmitDataAndWatch(TxData, l)
if err != nil {
return []byte{}, fmt.Errorf("cannot submit data:%v", err)
}

l.Info("Avail Block Reference:", "Ref", avail_Blk_Ref)

ref_bytes_Data, err := avail_Blk_Ref.MarshalToBinary()
if err != nil {
return []byte{}, fmt.Errorf("cannot get the binary form of avail block reference:%v", err)
}

return ref_bytes_Data, nil
}
34 changes: 34 additions & 0 deletions op-avail/internal/config/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package config

import (
"encoding/json"
"io"
"os"
)

type Config struct {
Seed string `json:"seed"`
ApiURL string `json:"api_url"`
AppID int `json:"app_id"`
}

func (c *Config) GetConfig(configFileName string) error {

jsonFile, err := os.Open(configFileName)
if err != nil {
return err
}
defer jsonFile.Close()

byteValue, err := io.ReadAll(jsonFile)
if err != nil {
return err
}

err = json.Unmarshal(byteValue, c)
if err != nil {
return err
}

return nil
}
70 changes: 70 additions & 0 deletions op-avail/internal/services/getBlockExtrinsicData.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package service

import (
"errors"
"fmt"

gsrpc "github.com/centrifuge/go-substrate-rpc-client/v4"
gsrpc_types "github.com/centrifuge/go-substrate-rpc-client/v4/types"
"github.com/centrifuge/go-substrate-rpc-client/v4/types/codec"
"github.com/ethereum-optimism/optimism/op-avail/internal/config"
"github.com/ethereum-optimism/optimism/op-avail/internal/types"
"github.com/ethereum/go-ethereum/log"
"github.com/vedhavyas/go-subkey"
)

// GetBlock: To fetch the extrinsic Data from block's extrinsic by hash
func GetBlockExtrinsicData(avail_blk_ref types.AvailBlockRef, l log.Logger) ([]byte, error) {

// Load config
var config config.Config
err := config.GetConfig("../op-avail/config.json")
if err != nil {
l.Error("Unable to create config variable for op-avail")
panic(fmt.Sprintf("cannot get config:%v", err))
}

//Intitializing variables
ApiURL := config.ApiURL
Hash := avail_blk_ref.BlockHash
Address := avail_blk_ref.Sender
Nonce := avail_blk_ref.Nonce

//Creating new substrate api
api, err := gsrpc.NewSubstrateAPI(ApiURL)
if err != nil {
return []byte{}, fmt.Errorf("cannot create api:%w", err)
}

// Converting this string type into gsrpc_types.hash type
blk_hash, err := gsrpc_types.NewHashFromHexString(Hash)
if err != nil {
return []byte{}, fmt.Errorf("unable to convert string hash into types.hash, error:%v", err)
}

// Fetching block based on block hash
avail_blk, err := api.RPC.Chain.GetBlock(blk_hash)
if err != nil {
return []byte{}, fmt.Errorf("cannot get block for hash:%v and getting error:%v", Hash, err)
}

//Extracting the required extrinsic according to the reference
for _, ext := range avail_blk.Block.Extrinsics {
//Extracting sender address for extrinsic
ext_Addr, err := subkey.SS58Address(ext.Signature.Signer.AsID.ToBytes(), 42)
if err != nil {
l.Error("unable to get sender address from extrinsic", "err", err)
}
if ext_Addr == Address && ext.Signature.Nonce.Int64() == Nonce {
args := ext.Method.Args
var data []byte
err = codec.Decode(args, &data)
if err != nil {
return []byte{}, fmt.Errorf("Unable to decode the extrinsic data by address: %v with nonce: %v", Address, Nonce)
}
return data, nil
}
}

return []byte{}, errors.New(fmt.Sprintf("Didn't found any extrinsic data for address:%v in block having hash:%v", Address, Hash))
}
Loading