Skip to content

Gasless consensus version: without signature → PublishVersion typed data; with signed body → relayed ProjectRegistry.publishVersionBySig

POST
/v1/developers/projects/{project_id}/versions/{version}/publish
curl --request POST \
--url https://testnet-rpc.necter.network/v1/developers/projects/example/versions/1/publish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "typed_data": { "domain": {}, "types": {}, "primaryType": "example", "message": {} }, "signature": "example", "permit": { "domain": {}, "types": {}, "primaryType": "example", "message": {} }, "permit_signature": "example" }'

Only for a submitted version that changes the consensus tier (scheduling/listing-only versions are active immediately and need no chain transaction). EIP-712 PublishVersion(address developer,bytes32 projectId, uint32 version,bytes32 consensusHash,bytes32 manifestHash,uint256 nonce,uint256 deadline), domain Necter ProjectRegistry. The indexer applies VersionPublished.

project_id
required
string
/^0x[0-9a-f]{64}$/
version
required
integer
>= 2
Media typeapplication/json
object
typed_data
required
object
domain
required
object
key
additional properties
any
types
required
object
key
additional properties
any
primaryType
required
string
message
required
object
key
additional properties
any
signature
required
string
/^0x[0-9a-f]{130}$/
permit
One of:
object
domain
required
object
key
additional properties
any
types
required
object
key
additional properties
any
primaryType
required
string
message
required
object
key
additional properties
any
permit_signature
One of:
string
/^0x[0-9a-f]{130}$/

Example generated

{
"typed_data": {
"domain": {},
"types": {},
"primaryType": "example",
"message": {}
},
"signature": "example",
"permit": {
"domain": {},
"types": {},
"primaryType": "example",
"message": {}
},
"permit_signature": "example"
}

Payload to sign

Media typeapplication/json

Typed data the owner signs (eth_signTypedData_v4); then POST it back as SignedGasless

object
action
required
string
Allowed values: bond unbond withdraw set_payout register_project publish_version
typed_data
required
object
domain
required
object
key
additional properties
any
types
required
object
key
additional properties
any
primaryType
required
string
message
required
object
key
additional properties
any
permit
One of:
object
domain
required
object
key
additional properties
any
types
required
object
key
additional properties
any
primaryType
required
string
message
required
object
key
additional properties
any
direct_tx
object
chain_id
required
integer
to
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
data
required
string
/^0x([0-9a-f]{2})*$/
value

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
description
string
expires_at
required
integer

Example

{
"action": "bond"
}

Submitted

Media typeapplication/json
object
status
required
string
Allowed values: queued sent confirmed reverted failed
tx_hash
One of:
string
/^0x[0-9a-f]{64}$/
error
string | null

Example

{
"status": "queued"
}

Malformed request (bad_request, invalid_field)

Media typeapplication/json
object
error
required

Stable machine code

string
message
required
string
details
object
key
additional properties
any
request_id
required
string

Example generated

{
"error": "example",
"message": "example",
"details": {},
"request_id": "example"
}

Authenticated but not allowed (forbidden, not_owner, not_enrolled, not_verified, scope_missing)

Media typeapplication/json
object
error
required

Stable machine code

string
message
required
string
details
object
key
additional properties
any
request_id
required
string

Example generated

{
"error": "example",
"message": "example",
"details": {},
"request_id": "example"
}

not_found

Media typeapplication/json
object
error
required

Stable machine code

string
message
required
string
details
object
key
additional properties
any
request_id
required
string

Example generated

{
"error": "example",
"message": "example",
"details": {},
"request_id": "example"
}

conflict, duplicate, already_exists, invalid_state

Media typeapplication/json
object
error
required

Stable machine code

string
message
required
string
details
object
key
additional properties
any
request_id
required
string

Example generated

{
"error": "example",
"message": "example",
"details": {},
"request_id": "example"
}

Semantically invalid (invalid_manifest, invalid_binding, invalid_evidence, incompatible, insufficient_collateral)

Media typeapplication/json
object
error
required

Stable machine code

string
message
required
string
details
object
key
additional properties
any
request_id
required
string

Example generated

{
"error": "example",
"message": "example",
"details": {},
"request_id": "example"
}

unavailable, no_validators, faucet_empty

Media typeapplication/json
object
error
required

Stable machine code

string
message
required
string
details
object
key
additional properties
any
request_id
required
string

Example generated

{
"error": "example",
"message": "example",
"details": {},
"request_id": "example"
}