@fr8/protocol
v1.2.0
Published
EDI X12/EDIFACT NFT Protocol for Supply Chain
Downloads
3
Readme
= TrueNFT - B2B NFT Protocol
=== Overview
TrueNFT enables B2B Messages to be tokenized either through EDI or XML Mappings and Data Ingestion
==== TrueNFT Protocol Diagram
=== Valid Server Setup
. Deploy the NFT and Master Proxy contracts
. Deploy the Universal Proxy contract with the Master Proxy's address
and an admin address (this should be a human account) as input
. Deploy the Controller contract with the Universal Proxy's address and
an admin address (the same address as in step 2) an input
. Call changeController
through the Universal Proxy from the admin
address. The controller should be changed to the controller address
deployed in step
Steps 1-3 cannot be performed through the API. Step 4 can if the
controller_address
is originally set to equal the universal_address
.
This solution is not ideal, so all of the steps 1-4 should be completed
during the server setup.
[[security--development]] === Security & Development
These smart contracts will need to be updated for gas efficiency and to verify their security in the upcoming weeks.
The basic smart contract implementation is a functional set of smart contracts that will meet the implementation needs of any company using EDI X12/EDIFACT.
==== API Contract Testing
- The continuous integration for github is a script that will run the postman and truffle tests on new commits added to the github repository.
- The truffle tests are a set of javascript unit tests that will verify the modular properties of the codebase to ensure that it always meets the intention of the smart contract architecture. They are designed to have near-complete code coverage and thus should prevent most bugs.
- The postman api unit tests are a set of tests for each api endpoint that verify that the endpoints will reject on invalid inputs and return the right data types.
In combination with the truffle tests, the postman tests will verify the integrity of the whole codebase.
The javascript endpoint implementation of the endpoints extends the test endpoints from last week. Now, in addition to data sanitation and returning proper values, they will parse the input data, format transactions and make ethereum calls through the infura web3. The new endpoints will also properly validate Corporate signatures of the nonce which protects admin transactions.
=== Usage
SEE link:/postman[API]
=== Deployments
SEE link:/deployments[DEPLOYMENTS]
=== Roadmap
[cols="<,<",options="header",] |=== |Development |Dates |GraphQL |2020 Q4 |Gas Optimizations |2020 Q4 |Composability |2020 Q4 |===
[abstract] .Abstract API reference for the Freight Trust dApp which allows recording, transfering and signing of EDI-based documents such as bills of lading or warehouse receipts.
// markup not found, no include::{specDir}intro.adoc[opts=optional]
== Endpoints
[.Default] === Default
[.getNonce] ==== getNonce
GET /getNonce
Returns the current message Freight Trust needs to sign to verify their next post request
===== Description
// markup not found, no include::{specDir}getNonce/GET/spec.adoc[opts=optional]
===== Parameters
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful query | <>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}getNonce/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}getNonce/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :getNonce/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}getNonce/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.ERC721Token] === ERC721Token
[.approve] ==== approve
POST /nft/approve/
Change or reaffirm the approved address for an NFT
===== Description
// markup not found, no include::{specDir}nft/approve/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust signature of the nonce <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| approved | The address being approved | X | null |
| tokenId | The id of the token to be approved | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Approve | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/approve/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/approve/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/approve/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/approve/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.balanceOf] ==== balanceOf
GET /nft/balanceOf/
Count all NFTs assigned to an owner
===== Description
// markup not found, no include::{specDir}nft/balanceOf/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| owner | The address of the owner | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Query | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/balanceOf/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/balanceOf/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/balanceOf/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/balanceOf/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.createRecord] ==== createRecord
POST /nft/createRecord/
Creates a new record
===== Description
Allows Freight Trust to create a record with the signature of the owner and of the participant.
// markup not found, no include::{specDir}nft/createRecord/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| recordID | The identifying hash of the record | X | null |
| owner | The owner of the record | X | null |
| participant | The address of the participant in the record | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Creation | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/createRecord/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/createRecord/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/createRecord/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/createRecord/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.getApprovedById] ==== getApprovedById
GET /nft/getApproved/
Get the approved address for a single NFT
===== Description
The approved address for this NFT, or the zero address if there is none
// markup not found, no include::{specDir}nft/getApproved/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| tokenId | The NFT to find the approved address for | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Query | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/getApproved/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/getApproved/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/getApproved/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/getApproved/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.isApprovedForAll] ==== isApprovedForAll
GET /nft/isApprovedForAll/
Query if an address is an authorized operator for another address
===== Description
True if operator
is an approved operator for owner
, false otherwise
// markup not found, no include::{specDir}nft/isApprovedForAll/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| owner | The address that owns the NFTs | X | null |
| operator | The address that acts on behalf of the owner | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Query | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/isApprovedForAll/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/isApprovedForAll/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/isApprovedForAll/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/isApprovedForAll/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.name] ==== name
GET /nft/name
Returns the token contract's name
===== Description
// markup not found, no include::{specDir}nft/name/GET/spec.adoc[opts=optional]
===== Parameters
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful query | <>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/name/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/name/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/name/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/name/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.ownerOf] ==== ownerOf
GET /nft/ownerOf/
Find the owner of an NFT
===== Description
// markup not found, no include::{specDir}nft/ownerOf/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| tokenId | The Id of the token in question | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Query | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/ownerOf/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/ownerOf/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/ownerOf/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/ownerOf/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.safeTransferFrom] ==== safeTransferFrom
POST /nft/safeTransferFrom/
Transfers the ownership of an NFT from one address to another address
===== Description
// markup not found, no include::{specDir}nft/safeTransferFrom/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust signature of the nonce <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| from | The sender of the transfer | X | null |
| to | The recipient of the transfer | X | null |
| tokenId | The id of the token to be transferred | X | null |
| extraData | Optional data to be sent with the transaction | - | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Transfer | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/safeTransferFrom/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/safeTransferFrom/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/safeTransferFrom/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/safeTransferFrom/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.setApprovalForAll] ==== setApprovalForAll
POST /nft/setApprovalForAll/
Allows Freight Trust to issue univeral approval
===== Description
Enable or disable approval for a third party (operator
) to manage all of Freight Trust's assets
// markup not found, no include::{specDir}nft/setApprovalForAll/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust signature of the nonce <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| operator | Address to add to the set of authorized operators | X | null |
| approved | True if the operator is approved, false to revoke approval | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Approve | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/setApprovalForAll/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/setApprovalForAll/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/setApprovalForAll/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/setApprovalForAll/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.signedTransfer] ==== signedTransfer
POST /nft/signedTransfer/
Signed Transfer
===== Description
Allows Freight Trust to sign and transfer a ERC721 token on the behalf of its holder
// markup not found, no include::{specDir}nft/signedTransfer/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| from | The sender of the transfer | X | null |
| to | The recipient of the transfer | X | null |
| tokenId | The id of the token to be transferred | X | null |
| data | Optional data to be sent with the transaction | - | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Transfer | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/signedTransfer/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/signedTransfer/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/signedTransfer/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/signedTransfer/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.supportsInterfaceById] ==== supportsInterfaceById
GET /nft/supportsInterface/
Returns an interface's support status
===== Description
// markup not found, no include::{specDir}nft/supportsInterface/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| interfaceId | The Id of the interface to check | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Query | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/supportsInterface/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/supportsInterface/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/supportsInterface/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/supportsInterface/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.symbol] ==== symbol
GET /nft/symbol
Returns the token contract's symbol
===== Description
// markup not found, no include::{specDir}nft/symbol/GET/spec.adoc[opts=optional]
===== Parameters
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful query | <>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/symbol/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/symbol/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/symbol/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/symbol/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.tokenByIndex] ==== tokenByIndex
GET /nft/tokenByIndex/
Returns the token identifier of the index
-th nft tracked by the contract
===== Description
// markup not found, no include::{specDir}nft/tokenByIndex/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| index | A counter less than `totalSupply()` | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Query | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/tokenByIndex/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/tokenByIndex/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/tokenByIndex/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/tokenByIndex/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.tokenOfOwnerByIndex] ==== tokenOfOwnerByIndex
GET /nft/tokenOfOwnerByIndex/
Returns the token identifier of the index
-th nft assigned to the owner
===== Description
// markup not found, no include::{specDir}nft/tokenOfOwnerByIndex/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| owner | The address of the owner | X | null |
| index | The index of the nft assigned to the owner | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Query | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/tokenOfOwnerByIndex/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/tokenOfOwnerByIndex/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/tokenOfOwnerByIndex/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/tokenOfOwnerByIndex/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.tokenURIById] ==== tokenURIById
GET /nft/tokenURI/
Enumerate NFTs assigned to an owner
===== Description
// markup not found, no include::{specDir}nft/tokenURI/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| tokenId | | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Query | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/tokenURI/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/tokenURI/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/tokenURI/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/tokenURI/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.totalSupply] ==== totalSupply
GET /nft/totalSupply
An API endpoint to get the total supply of tokens in the ERC721 contract
===== Description
Returns the total supply of Non fungible tokens
// markup not found, no include::{specDir}nft/totalSupply/GET/spec.adoc[opts=optional]
===== Parameters
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful query | <>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/totalSupply/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/totalSupply/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/totalSupply/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/totalSupply/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.transferFrom] ==== transferFrom
POST /nft/transferFrom/
Transfer ownership of an NFT without safety checks
===== Description
Allows Freight Trust to tranfer tokens unsafely --
THE CALLER IS RESPONSIBLE TO CONFIRM THAT IS CAPABLE OF RECEIVING NFTS OR ELSE THEY MAY BE PERMANENTLY LOST
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust signature of the nonce <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| from | The sender of the transfer | X | null |
| to | The recipient of the transfer | X | null |
| tokenId | The id of the token to be transferred | X | null |
|===
===== Return Type
<>
===== Content Type
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Transfer | <>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/transferFrom/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/transferFrom/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/transferFrom/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/transferFrom/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.versionRecord] ==== versionRecord
POST /nft/versionRecord/
Versions a record for Freight Trust
===== Description
Allows Freight Trust to version one of the records they own.
// markup not found, no include::{specDir}nft/versionRecord/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust nonce signature to verify this action <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| current | The identifying hash of the record | X | null |
| new | The new identifying hash of the record | X | null |
|===
===== Return Type
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Edit | <<>>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/versionRecord/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/versionRecord/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/versionRecord/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/versionRecord/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.versionRecordSigned] ==== versionRecordSigned
POST /nft/versionRecord/signed/
Versions a record for the owner
===== Description
Allows Freight Trust to version a record for the owner using the owner's signature.
// markup not found, no include::{specDir}nft/versionRecord/signed/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| current | The identifying hash of the record | X | null |
| new | The new identifying hash of the record | X | null |
| owner | The owner of the record which will be updated | - | null |
|===
===== Return Type
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successful Editing | <<>>
| 420 | Bad Request | <<>>
| 428 | Request Timeout | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}nft/versionRecord/signed/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}nft/versionRecord/signed/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :nft/versionRecord/signed/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}nft/versionRecord/signed/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.ProxyAndUpgrade] === ProxyAndUpgrade
[.changeController] ==== changeController
POST /proxy/changeController/
Sets the the new controller address
===== Description
Sets the new controller address.
// markup not found, no include::{specDir}proxy/changeController/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust signature of the nonce <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| newController | The new controller address | X | null |
|===
===== Return Type
<>
===== Content Type
- application/xml
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successfuly Changed | <>
| 425 | Invalid Input | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}proxy/changeController/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}proxy/changeController/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :proxy/changeController/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}proxy/changeController/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.changeMaster] ==== changeMaster
POST /proxy/changeMaster/
Sets the address of Function
===== Description
Sets address that is delegate called to run a function's logic. This function must be called with an signed nonce from the Freight Trust account in the https body.
// markup not found, no include::{specDir}proxy/changeMaster/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust signature of the nonce <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| newMaster | The new master address | X | null |
|===
===== Return Type
<>
===== Content Type
- application/xml
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successfuly Changed | <>
| 425 | Invalid Input | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}proxy/changeMaster/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}proxy/changeMaster/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :proxy/changeMaster/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}proxy/changeMaster/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.getControler] ==== getControler
GET /proxy/getControler
Gets address of the controler Contract
===== Description
Gets the address of the controler contract.
// markup not found, no include::{specDir}proxy/getControler/GET/spec.adoc[opts=optional]
===== Parameters
===== Return Type
<>
===== Content Type
- application/xml
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | successful operation | <>
|===
===== Samples
// markup not found, no include::{snippetDir}proxy/getControler/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}proxy/getControler/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :proxy/getControler/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}proxy/getControler/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.getMaster] ==== getMaster
GET /proxy/getMaster
Gets address of the Master Contract
===== Description
Gets the address of the master contract.
// markup not found, no include::{specDir}proxy/getMaster/GET/spec.adoc[opts=optional]
===== Parameters
===== Return Type
<>
===== Content Type
- application/xml
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | successful operation | <>
|===
===== Samples
// markup not found, no include::{snippetDir}proxy/getMaster/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}proxy/getMaster/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :proxy/getMaster/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}proxy/getMaster/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.getTarget] ==== getTarget
GET /proxy/getTarget/
Gets address of Function
===== Description
Gets address that is delegate called to run a function's logic.
// markup not found, no include::{specDir}proxy/getTarget/GET/spec.adoc[opts=optional]
===== Parameters
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| id | The function selector the return the target of | X | null |
|===
===== Return Type
<>
===== Content Type
- application/xml
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | successful operation | <>
| 425 | Invalid Input | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}proxy/getTarget/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}proxy/getTarget/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :proxy/getTarget/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}proxy/getTarget/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.getUniversalProxy] ==== getUniversalProxy
GET /proxy/getUniversalProxy
Gets address of the Universal Proxy Contract
===== Description
Gets the address of the Universal Proxy contract.
// markup not found, no include::{specDir}proxy/getUniversalProxy/GET/spec.adoc[opts=optional]
===== Parameters
===== Return Type
<>
===== Content Type
- application/xml
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | successful operation | <>
|===
===== Samples
// markup not found, no include::{snippetDir}proxy/getUniversalProxy/GET/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}proxy/getUniversalProxy/GET/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :proxy/getUniversalProxy/GET/GET.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}proxy/getUniversalProxy/GET/implementation.adoc[opts=optional]
endif::internal-generation[]
[.pause] ==== pause
POST /proxy/pause
Pauses the execution
===== Description
Calls the pause method in the universal proxy, blocking any state changes while Freight Trust's Network Operations Group updates.
// markup not found, no include::{specDir}proxy/pause/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust signature of the nonce <> | X | |
|===
===== Return Type
<>
===== Content Type
- application/xml
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successfuly Paused | <>
| 425 | Invalid Input | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}proxy/pause/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}proxy/pause/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :proxy/pause/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}proxy/pause/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[.setTarget] ==== setTarget
POST /proxy/setTarget/
Sets the address of Function
===== Description
Sets address that is delegate called to run a function's logic. This function must be called with an signed nonce from the Freight Trust account in the https body.
// markup not found, no include::{specDir}proxy/setTarget/POST/spec.adoc[opts=optional]
===== Parameters
===== Body Parameter
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| auth | The Freight Trust signature of the nonce <> | X | |
|===
====== Query Parameters
[cols="2,3,1,1,1"] |=== |Name| Description| Required| Default| Pattern
| id | Function selector whose target to change. | X | null |
| target | The address to set the function too | X | null |
|===
===== Return Type
<>
===== Content Type
- application/xml
- application/json
===== Responses
.http response codes [cols="2,3,1"] |=== | Code | Message | Datatype
| 200 | Successfuly Changed | <>
| 425 | Invalid Input | <<>>
|===
===== Samples
// markup not found, no include::{snippetDir}proxy/setTarget/POST/http-request.adoc[opts=optional]
// markup not found, no include::{snippetDir}proxy/setTarget/POST/http-response.adoc[opts=optional]
// file not found, no * wiremock data link :proxy/setTarget/POST/POST.json[]
ifdef::internal-generation[] ===== Implementation
// markup not found, no include::{specDir}proxy/setTarget/POST/implementation.adoc[opts=optional]
endif::internal-generation[]
[#models] == Models
[#ApiResponse] === ApiResponse
[.fields-ApiResponse] [cols="2,1,2,4,1"] |=== | Field Name| Required| Type| Description| Format
| code | | Integer | | int32
| type | | String | |
| message | | String | |
|===
[#Auth] === Auth
[.fields-Auth] [cols="2,1,2,4,1"] |=== | Field Name| Required| Type| Description| Format
| signature | X | String | |
|===
[#InlineObject] === InlineObject
[.fields-InlineObject] [cols="2,1,2,4,1"] |=== | Field Name| Required| Type| Description| Format
| freightTrustAuth | | auth | |
| senderAuth | | auth | |
|===
[#InlineObject1] === InlineObject1
[.fields-InlineObject1] [cols="2,1,2,4,1"] |=== | Field Name| Required| Type| Description| Format
| freightTrustAuth | | auth | |
| ownerAuth | | auth | |
| partAuth | | auth | |
|===
[#InlineObject2] === InlineObject2
[.fields-InlineObject2] [cols="2,1,2,4,1"] |=== | Field Name| Required| Type| Description| Format
| freightTrustAuth | | auth | |
| ownerAuth | | auth | |
|===
=== License
Copyright 2020 (C) FreightTrust and Clearing Corporation All Rights Reserved - https://freighttrust.com
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/