Skip to content

Commit

Permalink
Merge pull request #202 from taikoxyz/TP-674--dorahacks-signups
Browse files Browse the repository at this point in the history
TP-674--dorahacks-signups
  • Loading branch information
myronrotter authored Feb 17, 2025
2 parents d9c3fef + 7504034 commit 90747e9
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 0 deletions.
88 changes: 88 additions & 0 deletions adapters/projects/dorahacks/signup.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package dorahacks

import (
"context"
"math/big"

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/taikoxyz/trailblazer-adapters/adapters"
)

const (
// event SignUp(uint256 indexed _stateIdx, PubKey _userPubKey, uint256 _voiceCreditBalance);
logSignupSignatureHex string = "0xc7563c66f89e2fb0839e2b64ed54fe4803ff9428777814772ccfe4c385072c4b"
)

type SignupIndexer struct {
client *ethclient.Client
addresses []common.Address
}

func NewSignupIndexer(client *ethclient.Client, addresses []common.Address) *SignupIndexer {
return &SignupIndexer{
client: client,
addresses: addresses,
}
}

var _ adapters.LogIndexer[adapters.Whitelist] = &SignupIndexer{}

func (indexer *SignupIndexer) Addresses() []common.Address {
return indexer.addresses
}

func (indexer *SignupIndexer) Index(ctx context.Context, logs ...types.Log) ([]adapters.Whitelist, error) {
var ws []adapters.Whitelist

for _, l := range logs {
if !indexer.isSignup(l) {
continue
}

block, err := indexer.client.BlockByNumber(ctx, big.NewInt(int64(l.BlockNumber)))
if err != nil {
return nil, err
}

txHash := l.TxHash
receipt, err := indexer.client.TransactionReceipt(ctx, txHash)
if err != nil {
return nil, err
}
if receipt.Status == 0 {
// tx failed, continue
continue
}

tx, pending, err := indexer.client.TransactionByHash(ctx, txHash)
if err != nil {
return nil, err
}
if pending {
// tx pending, continue
continue
}

sender, err := indexer.client.TransactionSender(ctx, tx, block.Hash(), receipt.TransactionIndex)
if err != nil {
return nil, err
}

w := &adapters.Whitelist{
User: sender, // msg.sender equals signup for DoraHacks MACI
Time: block.Time(),
BlockNumber: block.NumberU64(),
TxHash: txHash,
}

ws = append(ws, *w)
}

return ws, nil
}

func (indexer *SignupIndexer) isSignup(l types.Log) bool {
return l.Topics[0].Hex() == logSignupSignatureHex
}
36 changes: 36 additions & 0 deletions adapters/projects/dorahacks/signup_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package dorahacks_test

import (
"context"
"testing"

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/taikoxyz/trailblazer-adapters/adapters"
"github.com/taikoxyz/trailblazer-adapters/adapters/projects/dorahacks"
)

func TestSignupIndexer(t *testing.T) {
taikoRPC := "https://rpc.taiko.xyz"
blocknumber := int64(861132)

ctx := context.Background()

client, err := ethclient.Dial(taikoRPC)
require.NoError(t, err)

indexer := dorahacks.NewSignupIndexer(client, []common.Address{common.HexToAddress(dorahacks.VotingAddress)})

logs, err := adapters.GetLogs(ctx, client, indexer.Addresses(), blocknumber)
require.NoError(t, err)

ws, err := indexer.Index(ctx, logs...)
assert.NoError(t, err)
assert.Len(t, ws, 1)
assert.Equal(t, common.HexToAddress("0xA9d1f06b6AF87B312aBbb523A5e41995F199930b"), ws[0].User)
assert.Equal(t, uint64(861132), ws[0].BlockNumber)
assert.Equal(t, uint64(1739528687), ws[0].Time)
assert.Equal(t, common.HexToHash("0x04f0a71af85058eeedd078cb2a21e18c82dbf93d814dcf0e051ad6c891116b60"), ws[0].TxHash)
}

0 comments on commit 90747e9

Please sign in to comment.