Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix GitHub devnet test #401

Closed
wants to merge 9 commits into from
Closed
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
3 changes: 1 addition & 2 deletions .bin/devnet.sh
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,4 @@ while true; do
done

echo "could not check devnet is_alive; fail!!!"
exit 1

exit 1
2 changes: 1 addition & 1 deletion .github/workflows/test_account.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
run: cd account && go test -timeout 600s -v -env devnet .
env:
TESTNET_ACCOUNT_PRIVATE_KEY: ${{ secrets.TESTNET_ACCOUNT_PRIVATE_KEY }}
INTEGRATION_BASE: "http://0.0.0.0:5050"
INTEGRATION_BASE: "http://localhost:5050"

# Test Account on mock
- name: Test Account with mocks
Expand Down
85 changes: 61 additions & 24 deletions account/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package account

import (
"context"
"encoding/json"
"errors"
"fmt"
"time"

"github.com/NethermindEth/juno/core/felt"
Expand All @@ -29,7 +31,6 @@ var (
//go:generate mockgen -destination=../mocks/mock_account.go -package=mocks -source=account.go AccountInterface
type AccountInterface interface {
Sign(ctx context.Context, msg *felt.Felt) ([]*felt.Felt, error)
BuildInvokeTx(ctx context.Context, invokeTx *rpc.InvokeTxnV1, fnCall *[]rpc.FunctionCall) error
TransactionHashInvoke(invokeTxn rpc.InvokeTxnType) (*felt.Felt, error)
TransactionHashDeployAccount(tx rpc.DeployAccountTxn, contractAddress *felt.Felt) (*felt.Felt, error)
TransactionHashDeclare(tx rpc.DeclareTxnType) (*felt.Felt, error)
Expand Down Expand Up @@ -317,12 +318,6 @@ func (account *Account) WaitForTransactionReceipt(ctx context.Context, transacti
}
}

// BuildInvokeTx formats the calldata and signs the transaction
func (account *Account) BuildInvokeTx(ctx context.Context, invokeTx *rpc.InvokeTxnV1, fnCall *[]rpc.FunctionCall) error {
invokeTx.Calldata = FmtCalldata(*fnCall)
return account.SignInvokeTransaction(ctx, invokeTx)
}

func (account *Account) AddInvokeTransaction(ctx context.Context, invokeTx rpc.InvokeTxnV1) (*rpc.AddInvokeTransactionResponse, error) {
return account.provider.AddInvokeTransaction(ctx, invokeTx)
}
Expand Down Expand Up @@ -420,26 +415,68 @@ func (account *Account) TransactionByHash(ctx context.Context, hash *felt.Felt)
return account.provider.TransactionByHash(ctx, hash)
}

func (account *Account) FmtCalldata(fnCalls []rpc.FunctionCall, cairoVersion int) ([]*felt.Felt, error) {
switch cairoVersion {
case 0:
return FmtCalldataCairo0(fnCalls), nil
case 2:
return FmtCalldataCairo2(fnCalls), nil
default:
return nil, errors.New("Cairo version not supported")
}
}

/*
Formats the multicall transactions in a format which can be signed and verified by the network and OpenZeppelin account contracts
Formats the call data for Cairo0 contracts
*/
func FmtCalldata(fnCalls []rpc.FunctionCall) []*felt.Felt {
callArray := []*felt.Felt{}
callData := []*felt.Felt{new(felt.Felt).SetUint64(uint64(len(fnCalls)))}

for _, tx := range fnCalls {
callData = append(callData, tx.ContractAddress, tx.EntryPointSelector)
func FmtCalldataCairo0(fnCalls []rpc.FunctionCall) []*felt.Felt {
execCallData := []*felt.Felt{}
execCallData = append(execCallData, new(felt.Felt).SetUint64(uint64(len(fnCalls))))

// Legacy : Cairo 0
concatCallData := []*felt.Felt{}
for _, fnCall := range fnCalls {
execCallData = append(
execCallData,
fnCall.ContractAddress,
fnCall.EntryPointSelector,
new(felt.Felt).SetUint64(uint64(len(concatCallData))),
new(felt.Felt).SetUint64(uint64(len(fnCall.Calldata))+1),
)
concatCallData = append(concatCallData, fnCall.Calldata...)
}
execCallData = append(execCallData, new(felt.Felt).SetUint64(uint64(len(concatCallData))+1))
execCallData = append(execCallData, concatCallData...)
execCallData = append(execCallData, new(felt.Felt).SetUint64(0))

if len(tx.Calldata) == 0 {
callData = append(callData, &felt.Zero, &felt.Zero)
continue
}
return execCallData
}

callData = append(callData, new(felt.Felt).SetUint64(uint64(len(callArray))), new(felt.Felt).SetUint64(uint64(len(tx.Calldata))+1))
callArray = append(callArray, tx.Calldata...)
/*
Formats the call data for Cairo 1 contracs
*/
func FmtCalldataCairo2(fnCalls []rpc.FunctionCall) []*felt.Felt {
execCallData := []*felt.Felt{}
execCallData = append(execCallData, new(felt.Felt).SetUint64(uint64(len(fnCalls))))

concatCallData := []*felt.Felt{}
for _, fnCall := range fnCalls {
execCallData = append(
execCallData,
fnCall.ContractAddress,
fnCall.EntryPointSelector,
new(felt.Felt).SetUint64(uint64(len(concatCallData))),
new(felt.Felt).SetUint64(uint64(len(fnCall.Calldata))),
)
concatCallData = append(concatCallData, fnCall.Calldata...)
}
callData = append(callData, new(felt.Felt).SetUint64(uint64(len(callArray)+1)))
callData = append(callData, callArray...)
callData = append(callData, new(felt.Felt).SetUint64(0))
return callData
execCallData = append(execCallData, new(felt.Felt).SetUint64(uint64(len(concatCallData))))
execCallData = append(execCallData, concatCallData...)

return execCallData
}

func PrintTxAsJson(tx any) {
qwe, err := json.MarshalIndent(tx, "", "")
fmt.Println(string(qwe), err)
}
Loading
Loading