viem-goviem-go

hashAuthorization

Computes an Authorization hash in EIP-7702 format

hashAuthorization

Computes an Authorization hash in EIP-7702 format: keccak256('0x05' || rlp([chain_id, address, nonce])).

Import

import "github.com/ChefBingbong/viem-go/utils/authorization"

Usage

import "github.com/ChefBingbong/viem-go/utils/authorization"
hash, err := authorization.HashAuthorization(authorization.HashAuthorizationParameters{
AuthorizationRequest: authorization.AuthorizationRequest{
Address: "0x1234567890123456789012345678901234567890",
ChainId: 1,
Nonce: 0,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Hash: %s
", hash)
// Hash: 0x...
// Get hash as bytes
hashBytes, err := authorization.HashAuthorizationBytes(authorization.AuthorizationRequest{
Address: "0x1234567890123456789012345678901234567890",
ChainId: 1,
Nonce: 0,
})
if err != nil {
log.Fatal(err)
}

Returns

  • Type: (string, error) for HashAuthorization/HashAuthorizationHex, ([]byte, error) for HashAuthorizationBytes

The authorization hash. HashAuthorization/HashAuthorizationHex returns a hex string with 0x prefix, HashAuthorizationBytes returns raw bytes.

Parameters

params (required)

  • Type: authorization.HashAuthorizationParameters

Parameters for hashing an authorization.

params := authorization.HashAuthorizationParameters{
AuthorizationRequest: authorization.AuthorizationRequest{
Address: "0x1234567890123456789012345678901234567890",
ChainId: 1,
Nonce: 0,
},
}
hash, _ := authorization.HashAuthorization(params)

params.AuthorizationRequest (required)

  • Type: authorization.AuthorizationRequest

The authorization request containing address, chain ID, and nonce.

authRequest := authorization.AuthorizationRequest{
Address: "0x1234567890123456789012345678901234567890",
ChainId: 1,
Nonce: 0,
}
params := authorization.HashAuthorizationParameters{
AuthorizationRequest: authRequest,
}

params.AuthorizationRequest.Address (required)

  • Type: string

The contract address being authorized. Can also use ContractAddress for compatibility.

authRequest := authorization.AuthorizationRequest{
Address: "0x1234567890123456789012345678901234567890",
// ...
}

params.AuthorizationRequest.ChainId (required)

  • Type: int

The chain ID for this authorization.

authRequest := authorization.AuthorizationRequest{
ChainId: 1,
// ...
}

params.AuthorizationRequest.Nonce (required)

  • Type: int

The account nonce for this authorization.

authRequest := authorization.AuthorizationRequest{
Nonce: 0,
// ...
}

Functions

HashAuthorization

Computes the authorization hash:

hash, _ := authorization.HashAuthorization(params)

HashAuthorizationHex

Computes the authorization hash and returns a hex string:

hash, _ := authorization.HashAuthorizationHex(authRequest)

HashAuthorizationBytes

Computes the authorization hash and returns bytes:

hashBytes, _ := authorization.HashAuthorizationBytes(authRequest)

Hash Format

The authorization hash is computed as:

keccak256('0x05' || rlp([chain_id, address, nonce]))

Where:

  • 0x05 is the EIP-7702 magic byte
  • The RLP-encoded list contains chain ID, address, and nonce

Notes

  • Used in EIP-7702 transactions for contract account authorization
  • The address field is required (cannot be empty)
  • The hash is used to authorize contract accounts to act as EOAs