Zenroom based Swarm of Oracles
After announcing to a DID controller, the Oracles provide a number of services, including:
- Cryptographic signature
- Blockchain interoperability and notarization
- On and off chain smart contract execution
๐ฉ Table of Contents (click to expand)
- Linux based machine
- the hostname on the host machine, must be reachable from the internet (can be an IP), the oracle use the hostname to announce their identities to the Controller
- Ports between the 20000 and 30000 must be open on the host machine
- On the host machine, add to /root/.ssh/authorized_keys the pubkey you will use to deploy from your workstation: ansible will use this pubkey to obtain root privileges on the host (not required if using the Linode scripts)
- Open an ssh port for ansible, can be configured in hosts.toml (default: ansible_port=22254) (not required if using the Linode scripts)
- The Oracles' ansible installs an SSL certificate using Letsencrypt and the oracle currently comunicates via https. This can generate issues on machines behind a proxy (e.g. a virtual machine).
- (DID-Controller only) redis running on port 6379
- git clone https://github.com/dyne/zenswarm/
- edit hosts.toml to set:
- address of target machine for deployment (default: zenswarm.zenroom.org )
- port that ansible will use to connect to the host (default: ansible_port=22254)
- amount of oracles to be deployed on that machine (default: nodes=3)
- edit ./ansible/init-instances.yml in case you want to use a different DID Controller to perform the announce and deannounce (defaults: announce_url: "https://did.dyne.org/api/W3C-DID-controller-create-oracle-DID.chain" and deannounce_url: "https://did.dyne.org/api/W3C-DID-controller-remove-oracle")
- edit ./ansible/subscription.csv to define which Oracle will notarize from which L1 to which L0
- make setup-tls to install the SSL certificate using Letsecncrypt
- (If deploying on Linode): execute make one-up IMAGE=(name of the linode image)
- (If NOT deploying on Linode): execute make install
After installation, run:
- make init to generate the secret keys of the Oracle(s)
- make start to generate the identity and trigger the announce of the Oracle(s)
- make kill performs a graceful shutdown that deannounces the Oracle(s), unregistering the Oracle(s) from the DID Controller
Once an Oracle is deployed, each Oracles tries to announce to the W3C-DID controller. In this stage, the Oracle will communicate its pubkeys, its version and some metadata. The W3C-DID Controller will register a DID per each Oracle, and store the DID-document on a database and blockchain.
Upon graceful shutdown, done via make kill from your workstation or pm2 delete [instansce-name] on the host machine, the Oracle will deannounce itself, which will prompt the W3C-DID Controller to remove the Oracle from the database.
Specs about the DID implementation is in Dyne.org's W3C-DID.
- On the machines where the oracles are deployed, use pm2 list to see how many instances of restroom_mw are running.
- A GUI-based monitoring service for the Oracle is the Zenswarm-Dashboard. The GUI retrieves a list of the active Oracles from the W3C-DID controller
Below a list of the main Oracle flows involving:
- Controller provisioning: provisioning of the DID Controller producing signed DID Document for the Oracles
- Oracle Provisioning: key issuance, DID document creation
- Oracle consensus based query
- Oracle update
sequenceDiagram
autonumber
participant A as Admin
participant C as Cloud
participant I as Controller
A->A: Admin keygen (aSK + aPK)
A->>C: Setup a Cloud provider
C->>I: Issuer Install
C->>A: Grant Issuer setup access
A->>I: Issuer init + aPK
I->I: Keygen (iSK + iPK)
I->I: DID Document creation
I->>A: DID publishing (containing iPK)
- Admin is the control terminal and generates a new keypair (aSK + aPK)
- Admin sets up a Cloud provider (one or more) can be remote or on-premises
- Issuer is created by the Cloud provider and installed with a signed OS
- Cloud grants to Admin setup access to the Issuer
- Admin initialized the Issuer machine with signed scripts and the Admin public key
- Controller generates an issuer keypair (iSK + iPK)
- Controller generates DID Document
- Controller shares its DID containing (iPK)
sequenceDiagram
autonumber
participant A as Admin
participant C as Cloud
participant V as O1..O2..On
participant I as Controller
participant B as Blockchain
A->>C: Deploy Oracle request
C->>A: Grant Oracle setup access
A->>C: Setup SSL
C->>V: Oracle provisioning (oSK + oPK)
V->>I: announce of Oracle
I->I: Ephemeral keygen (eSK + ePK) or sidechannel
I->>V: iSK signed request + eSK
V->>I: eSK signed answer: IP + oPK
I->I: ePK verify and store Oracle IP + oPK
I->I: Create Oracle DID
I->>B: Notarize Oracle DID
B->>I: Return txId with DID
I->I: Store txId as DID
- Admin orders the creation of Oracle to the Cloud provider
- Cloud provider grants the Admin setup access to deploy the Oracle (IP + SSH)
- Admin set up SSL certificates in Cloud
- Cloud provider creates the Oracle on the host machine, and generates keys (oSK, oPK)
- Oracle announces its identity to the Controller (URL + oPK)
- Controller generates ephemeral secret key (eSK) (this step can moved to a side channel)
- Controller sends eSK signed with its private key (iSK), its public key (iPK) is known
- Cloud verify signed eSK and signs it with its private key (oSK)
- Controller verifies eSK signed from Oracle using Oracle's publick key (oPK)
- Controller creates DID document for Oracle (containins DID of future txId), DID id is oPK
- Controller notarizes DID document of Oracle on Blockchain
- Blockchain returns txId storing DID document Oracle
- Controller stores txId as DID document (txId DID is contained in Oracle's DID Document)
sequenceDiagram
autonumber
participant U as User
participant I as Controller
participant O as Oracle
participant V as O1..O2..On
participant B as Blockchain
U->>I: Ask active Oracles
I->>U: Returns list of Oracles
U->>O: Asks Oracle distributed query
O->>+V: Oracles queries Swarm-of-Oracles
V->V: Execute queries
V->>-O: Return ECDSA signed result or error
O->O: Consensus on results or errors
O->>U: return ECDSA signed collective result or error
U->>B: (optional) queries Oracles' txId containing W3C-DID
B->>U: (optional) returns txId containing W3C-DID
- User queries to Oracle Controller requesting list of registered Oracles in the Swarm of Oracles (SoO)(or an event or a time trigger)
- Controller returns list of registered SoO
- User makes to request to one Orace to perform a distributed query
- Oracles queries Swarm-of-Oracles (SoO) chosen from a trusted random
- SoO perform POST to endpoint
- SoO returned ECDSA signed output to Oracle
- Oracle verifies output and signatures of SoO
- Oracle returns ECDSA signed aggregated output of SoO
- (Optional) User queries blockchain to read notarized DID Documents of Oracle(s)
- (Optional) Blockchain returns DID Document notarized in tx
sequenceDiagram
autonumber
participant A as Admin
participant I as Controller
participant V as O1..O2..On
A->>I: aSK signed update ZIP
I->I: aPK verify update ZIP
I->>V: iSK signed update ZIP
V->V: iPK verify and install ZIP
- Admin signs and uploads a ZIP with updated scripts
- Issuer verifies the ZIP is signed by the Admin
- Issuer signs and uploads the update ZIP to all VM
- VM verifies the ZIP is signed by the Issuer and installs the scripts
sequenceDiagram
autonumber
participant A as Alice
participant SC as Transfer SC
participant OE as Oracle ETH
participant OP as Oracle Planetmint
participant B as Bob
OE->>SC: Oracle creates the SC
A->>SC: Alice allow the SC to transfer a NFT
A->>SC: Alice calls the begin transfer method
A-->>OE: SC transfer the NFT and emit an event
Note over A,OE: The SC was authorized by Alice to transfer
rect rgb(191, 223, 255)
note right of OP: Inter-chain transfer
OP->>OP: Oracle create an asset on planetmint
OE->>OE: Oracle destroy the asset on ethereum
end
OP->>B: Oracle transfer the asset to Bob
Alice sends an Ethereum NFT (ERC 721) and Bob receives a Planetmint asset, using a double-escrow approach. The NFT and the asset represent the same non-fungible token:
- A smart contract (SC) is created on ethereum, in its constructor, the account of the oracle is set as
the owner
- Alice allows (approve in the NFT terminology) the SC to transfer an NFT (the one she wants to send to Bob)
- Alice starts the transfer by calling a method on the Ethereum SC
- The SC transfer the NFT from the account of Alice to the account of the oracle on ethereum (the SC sends the NFT to
the owner
) and emits and event, to which the oracle is listening - The oracle creates an asset on Planetmint which represents the same object as the NFT he received (using a
CREATE
transaction) - The oracle destroys the NFT on Ethereum
- The oracle sends the asset to Bob (using a
TRANSFER
transaction)
Below a list of the APIs available on an Oracle
Returns json data containing the Oracle's identity:
-
Identity
-
uid: contains URL and HTTPS port
-
baseUrl: the URL
-
HTTPS port
-
ECDSA, EDDSA, Schnorr, Dilithium, public keys
-
Ethereum and Bitcoin address
-
List of available APIs
-
Country
-
State (region)
-
subscriptions: list of blockchain(s) the Oracles has a websocket subscription to
-
L0: blockchain the Oracle is notarizing onto
-
URL
/api/zenswarm-oracle-get-identity
-
Method:
GET
orPOST
-
Data Params
None
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"events_subscriptions": [],
"identity": {
"API": [
"/api/zenswarm-oracle-announce",
"/api/ethereum-to-ethereum-notarization.chain",
"/api/zenswarm-oracle-get-identity",
"/api/zenswarm-oracle-http-post",
"/api/zenswarm-oracle-key-issuance.chain",
"/api/zenswarm-oracle-ping",
"/api/sawroom-to-ethereum-notarization.chain",
"/api/zenswarm-oracle-get-timestamp",
"/api/zenswarm-oracle-update",
"/api/zenswarm-oracle-get-signed-timestamp",
"/api/zenswarm-oracle-sign-dilithium",
"/api/zenswarm-oracle-sign-ecdsa",
"/api/zenswarm-oracle-sign-eddsa",
"/api/zenswarm-oracle-sign-schnorr",
"/api/zenswarm-dilithium-signature-verification-on-planetmint.chain",
"/api/zenswarm-oracle-execute-zencode-planetmint.chain",
"/api/zenswarm-post-6-rand-oracles.chain",
"/api/zenswarm-read-from-fabric",
"/api/zenswarm-write-on-fabric",
"/api/zenswarm-read-from-ethereum",
"/api/zenswarm-write-on-ethereum.chain",
"/api/zenswarm-read-from-planetmint",
"/api/zenswarm-write-on-planetmint",
"/api/zenswarm-oracle-verify-dilithium",
"/api/zenswarm-oracle-verify-ecdsa",
"/api/zenswarm-oracle-verify-eddsa",
"/api/zenswarm-oracle-verify-schnorr"
],
"Country": "FR",
"L0": "ethereum",
"State": "NONE",
"baseUrl": "https://swarm1.dyne.org",
"bitcoin_address": "bc1q6hygvxc3szryv7gm3tz45t0jteexhfn3ttnkr5",
"description": "restroom-mw",
"dilithium_public_key": "ItLfEp0MYHZLlunATIOdjVtlMI0YdSUb7TwEcJFfyD1noDqWbdNmCW7ODIP3sWUxVP/+X+Xerw+mgCxulAiuU4k1Jc3LtliYuXIjmGr8O+SyIwLKnEmi7Vv4hxT0PnubZHEnlipovn298+Fibas4/GgP4c5b3omzZuZXAJ/ncwbuOLbs4XaJckNWEK9Gkq+WiNjCu0mnd5ERVawXTnfi5377f63nOAj7VqSHJImc8lQ34WtLRgyGVSQySyVtEzeCWlBfzVp1+rNjPIwc+xvp8NBdeHiZdL/kzFXtagD5MkgxtFDfj5BPVyWcfs6mUnjetfz20zerHsrSe3nBCbe5pPYLtqzkIPntiNQk6LFqELQo4DwHiXOn0iulGLJlVTkKKc5hJUGLSrrWurN0heBYIkaPEgkNTuLAwWRV3rV74a18L4rsR713yYQB85oFlgXgd0vOp/BUzrTExwslq5MviwUI5m5TArSnGCGBhvpI3HXydVUw391JztvJd18r6lbtGCD1/4FUXZFVtTYFfCwAzao6fcEDa8eiqoAwzrbHUSgqE9WEbR0BxaHMBTANh7i5mnNfcdqFi/rcce7Q29Rt5gSfST7d30YMlmXrIuB2zok2GQnvWSHiFMg7eP/FSvVLMy6CXER0Vsc/f7IDjUmfVF7dDWQzVA+/4/N6aGqaesKx4vELM/ZhvALy9bxOM1e6zE2AW9taal9rrdcLQ82mD00pX0cZ2ulAYWLF66OVIl3APn4zGlKceYtvxlmMba3Qc3gzPSdyDfqaW7mI7/P9YpXphogC6N0kHcvBfQt7YB5U8KE3fG+OoqfSVDcmP/lcT+3Gi3NgoxLYzhN+m3daBpNyWBdQbpWBYYlGa5dxcPmc2G6/WhLPPPEvAZiviakxd0WJtqbeKhTkxHpORwavCzSXm10YnGXbV/JBIV//LDNclwRJ6zqiD2y1ha3XScNIyzOW8rKebsIgJHquXCn2DHLjZJggJepU4Wy9AJ2PmjeP98JS/8+n1mTlkGT+OL4dzAYn3cZRNeC1BdG/dPExwr8i53BjX/suybLLKcHRdg1M8Wh1qo36s+7Cj32oRR3gPIdhcbxmM1udlqdplHk5gUV3ZX2p47C84op+JILgSfOvm8iD8ovxE1mSxQxnHT+UjMRynk0m+kVQvEUV9vNTxHm5bgi6OrjsXOBlLolyF1PMjPXBKymOu9g0gMfpXtGYAO2uSFVCocWTLAzBn9X9zCEy9NLSLcwccvx1Ha1TpKuIj9axtPtE5h6yST/bNxSDdfDLKppkgYafBiUWa9skNMMOAKywqAa2nZXV3qaaJz2ItyJjUfd2RY3NPxh/9LwqsGiwTBSab81hCmbiP6Kto97npEvGWSkNSfO03mkooiP4+6GyzsbGqSqgwvmCUg4DYlypg+B6WC4JanKcKh/7TbZ6py4j0EWWRVjG4saXYPQvEOTEMKl2XF7EAZlkJJ+Px2ODws+fm8TxhwnQv5lYk8SNETFcYr3At1q8vkoV3oYMlsLK+JNUDeajIBvhht3UXlV1qq9302LzkKY7NaB98RYrYtnMvm9lE+rrAtpwVagKAhI9D8Ro3DXvqFcYsUq4/YrzqBSvSpCE2Hr5SJfdG0gauj3/8c8Dp48ZMSPvAEogGhio4A9p6v2tkY4jbZtZ52VqeHcvapsernTLcSze43KgQ1IZ9IsVifPJ/T4PwwGdN/wdHruerxJyuczsRkav53Ab/jqI5yRZfjok5ainBQ==",
"ecdh_public_key": "BGKoemBeotGNDDRo5UkTt22A6JptWw8cBfNJsWqZ0a5HoJeTkJbxt8rgUkqOo01MWzlYzS4fTDLop+iKaJ4wPYM=",
"eddsa_public_key": "DTfR61WARbLGRKKktKXFA4ju7wGPHweCWr4k6XEpYiFz",
"ethereum_address": "d4f1a1e96bc645b546b8490061fca2ca4e4aa176",
"ip": "swarm1.dyne.org",
"port_https": "20003",
"reflow_public_key": "FpQNINRts97o3vLXc29wu32xKG/FScspyjkfzipvvA9ynzlG3deSfWpu6byqn9acCHbGVKuuooDJ5zhylwCMaOsmC3wUvKbCLylaJuaroYqIu9j03ELOZamfTTerG3KdAS+DJNbnU/Qm5Qo9b3EFVvIcJEw+7SIwV5fztnC9wzy9dq2IAq1OQSQCQ69ZDRIRE5DspHik0y7ib4Qm6QRsJ3IDqt4XBKYxJAZdJ1rgsMCTdtx0YREGnOZSSILbWYQF",
"schnorr_public_key": "Fdui5ug5o2AlRHLtKwF3j6YwYm2JVnY4aqZW6Wyse/ykGlixYUFKZLNFmBQFBiW/",
"tracker": "https://apiroom.net/",
"uid": "swarm1.dyne.org:20003",
"version": "2"
},
"subscriptions": {
"fabchain": {
"api": "http://78.47.38.223:8545",
"name": "fabchain",
"sub": "ws://78.47.38.223:8546",
"type": "ethereum"
}
}
}
-
Error Response:
None
-
Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-get-identity' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {},
"keys": {}
}'
Returns json data with a string.
-
URL
/api/zenswarm-oracle-ping
-
Method:
GET
orPOST
-
Data Params
None
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": [
"I_am_alive!"
]
}
-
Error Response:
None
-
Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-ping' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {},
"keys": {}
}'
Returns json data with a string, containing the timestamp fetched using the JavaScript method getTime() from the host machine
-
URL
/api/zenswarm-oracle-get-timestamp
-
Method:
GET
orPOST
-
Data Params
None
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"myTimestamp": "1656931966016"
}
-
Error Response:
None
-
Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-get-timestamp' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {},
"keys": {}
}'
Returns json data with a string, containing the timestamp fetched using the JavaScript method getTime() from the host machine, along with its ECDSA signature, produced by the Oracle its ECDSA sk
-
URL
/api/zenswarm-oracle-get-signed-timestamp
-
Method:
GET
orPOST
-
Data Params
None
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"ecdsa_signature": {
"r": "ivjynFRQXm4EYKGwYpXSejoZvLNmEYHb3O5pFh2I+F8=",
"s": "DWLIWDtSTxfyuKRuj2d0uIkRjKRaaJwvoBbU+qmFZJQ="
},
"myTimestamp": "1656932308339"
}
-
Error Response:
None
-
Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-get-signed-timestamp' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {},
"keys": {}
}'
Returns json data contained in asset along with the Dilithium QP signature, produced by the Oracle its Dilithium sk.
-
URL
/api/zenswarm-oracle-sign-dilithium
-
Method:
POST
-
Data Params required:
asset={data}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"asset": {
"array": [
1,
2,
3
],
"dictionary": {
"number": 1969,
"string": "hello world again!"
},
"number": 42,
"string": "hello world!"
},
"dilithium_signature": "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"
}
- Error Response:
Code: 500 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-sign-dilithium]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-sign-dilithium' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"asset": {
"string": "hello world!",
"number": 42,
"array": [1,2,3],
"dictionary": {"string": "hello world again!","number":1969}
}
},
"keys": {}
}'
Returns json data contained in the asset along with the ECDSA signature, produced by the Oracle its ECDSA sk
-
URL
/api/zenswarm-oracle-sign-ecdsa
-
Method:
POST
-
Data Params required:
asset={data}
-
Success Response:
- Code: 200
Content:
- Code: 200
"asset": {
"array": [
1,
2,
3
],
"dictionary": {
"number": 1969,
"string": "hello world again!"
},
"number": 42,
"string": "hello world!"
},
"ecdsa_signature": {
"r": "VSWtbgWid2bMvXDVd2pemTlYb204E3+TgjhQh1nu38M=",
"s": "EH16QToBcWVqasQ8+3uTSgklvvk6odXw/ut1KuDDHkk="
}
}
- Error Response:
Code: 500 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-sign-ecdsa]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-sign-ecdsa' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"asset": {
"string": "hello world!",
"number": 42,
"array": [1,2,3],
"dictionary": {"string": "hello world again!","number":1969}
}
},
"keys": {}
}'
Returns json data contained in the asset along with the EDDSA signature, produced by the Oracle its EDDSA sk
-
URL
/api/zenswarm-oracle-sign-eddsa
-
Method:
POST
-
Data Params required:
asset={data}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"asset": {
"array": [
1,
2,
3
],
"dictionary": {
"number": 1969,
"string": "hello world again!"
},
"number": 42,
"string": "hello world!"
},
"eddsa_signature": "3E7obC3UDtVsf5v8c52pYbqv39pJeFHGyFbqnK2shZdmtPB3EjfpwAKwYdZ8jrDGe6buHXUDvD9ZVeADLErLdMv6"
}
- Error Response:
Code: 500 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-sign-eddsa]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-sign-eddsa' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"asset": {
"string": "hello world!",
"number": 42,
"array": [1,2,3],
"dictionary": {"string": "hello world again!","number":1969}
}
},
"keys": {}
}'
Returns json data contained in the asset along with the Schnorr signature, produced by the Oracle its Schnorr sk
-
URL
/api/zenswarm-oracle-sign-schnorr
-
Method:
POST
-
Data Params required
asset={data}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"asset": {
"array": [
1,
2,
3
],
"dictionary": {
"number": 1969,
"string": "hello world again!"
},
"number": 42,
"string": "hello world!"
},
"schnorr_signature": "GO2MvxSUezuUGnNXJ8715MisUCn+bXzjISI311MhdWiXTfilahlFwUkwqFQ1MvBMBD/sA52Jq3h4T5zFMzSaZJfsMQZeTrJ64fG38oBw4Qw="
}
- Error Response:
Code: 500 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-sign-schnorr]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-sign-schnorr' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"asset": {
"string": "hello world!",
"number": 42,
"array": [1,2,3],
"dictionary": {"string": "hello world again!","number":1969}
}
},
"keys": {}
}'
Returns json data containing the result of the POST performed by the Oracle
-
URL
/api/zenswarm-oracle-http-post
-
Method:
POST
-
Data Params
post{data={data to post}}
endpoint={URL}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": {
"result": {
"User123456": {
"keyring": {
"ecdh": "a5b0Zw3RNUlUcKk9ZSmt53uesVJW5PHQ8gcKISbQjvo="
}
}
},
"status": 200
}
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-http-post]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm1.dyne.org:20002/api/zenswarm-oracle-http-post' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"post": {
"data": {
"myName": "User123456"
}
},
"endpoint": "https://apiroom.net/api/dyneorg/API-generate-keyring-passing-user-name"
},
"keys": {}
}'
Executes Zenroom in Planetmint, Returns json data containing Planetmint fullfillment and transaction id. Zenroom script is passed in the post, in the example, the script verifies a Dilithium QP signature.
-
URL
/api/zenswarm-oracle-execute-zencode-planetmint.chain
-
Method:
POST
-
Data Params
asset={data}
data={data}
script={zencode}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": {
"result": {
"success": true,
"tx": {
"asset": {
"data": {
"houses": [
{
"name": "Harry",
"team": "Gryffindor"
},
{
"name": "Draco",
"team": "Slytherin"
}
],
"number": 42
}
},
"id": "469481d390dbdb53cf718481b47a65b677f038d89951e14609e87a58fa784409",
"inputs": [
{
"fulfillment": "pYIVMYCCAW9TY2VuYXJpbyAncXAnOiBCb2IgdmVyaWZpZXMgdGhlIHNpZ25hdHVyZSBmcm9tIEFsaWNlCkdpdmVuIEkgaGF2ZSBhICdkaWxpdGhpdW0gcHVibGljIGtleScgZnJvbSAnQWxpY2UnCkdpdmVuIHRoYXQgSSBoYXZlIGEgJ3N0cmluZyBkaWN0aW9uYXJ5JyBuYW1lZCAnaG91c2VzJyBpbnNpZGUgJ2Fzc2V0JwpHaXZlbiBJIGhhdmUgYSAnZGlsaXRoaXVtIHNpZ25hdHVyZScgbmFtZWQgJ2RpbGl0aGl1bSBzaWduYXR1cmUnIGluICdvdXRwdXQnCldoZW4gSSB2ZXJpZnkgdGhlICdob3VzZXMnIGhhcyBhIGRpbGl0aGl1bSBzaWduYXR1cmUgaW4gJ2RpbGl0aGl1bSBzaWduYXR1cmUnIGJ5ICdBbGljZScKVGhlbiBwcmludCB0aGUgc3RyaW5nICdvaycKgYIMt3siZGlsaXRoaXVtX3NpZ25hdHVyZSI6ICIwTVN1VlRHaTZORzV6c2ZKRFdVU0dEeUE2NUhWaVNMc1krcnl1T25ZOEFiWm4wRjd2ZjBMTUNVaG1wM2xiZ3VBOVZHYVAweXZZcWp4KzRCTkQ2V1NSbHpRa0phbk5RK2V1RHVXS3FKZHh1M2FnYzM5UGxqTitQUGgwOWxCRXBWVHNONlhaNzYrZVhmSzdFVytWd0dCc0Y3RGQvSU5KYWZscXEvNDZRakZ4bUlITHYydU9PeTVNTEpXYlFrMlJqc1RyTjdRRVVFQ05GN0FDWGlhbExZZXp6TWpqaFJVY0tqMkhGTHNQejFrcjRPcWxtMlpXb0tISzRjZXFCVUQrZ1ZlM1MvTm9WK1c1RDhvVVd1OW5NTDQ2UFQ5dTN3NGo3dTBFTzdJVXMxWmRaT2YyY1pBbHpHMmpIT0FLd3JrNlBtek9tQ1hSZ2lKZ1I1eTZFUENFb0ZBY0g2SGNTbUFpUXF1VUV4dURvZi85cFNGSXJHamZ2OXVOV2xPdzQ0c3VqWVphdkNNQnNxRlhzWFJUdDYvcWpnYkVwU2R6ZXJteU9VTmxqd2hWa0lUNXFvMHVYVE5EWnUxQVlqRlYvdSswQnBtb21JZHJ6UnhKcGJiVk1OcVgwQlhEREhZTlZnQVlmbUpZR3duNVE4UWVBNS8zN1Z2TXRqc2ZGenNVM051eFo2QnROTXdhWTh0elNYNmJjTE4zdGN0YlRZb0pKbDZnVEFxVFM3ZHVTVkZGMGpCNG9BM0luSDVkd2JPcjNBMEtoUEYrN0JyMll1U0EzTzErdFJPVGpNaGRCTXlCRDZSUjRWR0lFaTR0K05GbFR5YWxXUW9NaStBUGxnK2F5cjB3TDhWQ2grdHREWFRCc1huYkZ5NlBuUkpOUkE5UHo5VExnc3pwYUFmZUgzeisrRFRXbVJCOVpqaHRWdzBCb3BmN2lWaXYxaGZ0d1ZVUERJM2VQdzdFMjJKVjF4THRMQUd4dUhlTUhUT3QvSHkrZzUxdzMySGpFcVd5Qm9oYWRpQkxaYWxxdHhTWGJlV216YlkwMnQ1K0FQV3pFcXdJekFWSjBnMXI2Q3ZiMGNRMXV5SjhZazZDYS9xQjZvOHpZcWRyTDNHVVY3OVUxb3NORFl1cFZTTzg0TzRxb0drQWo2cDd6LzJtVi9QMkhha2YyVUxPU1RaaEhUODkvQ29vc3FQek5QanJsQ2hzbk5NWWgySGRFUG5ZQmRibGJHWlo3ZTlBS3JxWGQ2NUFJbU01VTIrU2dobGhKbkdNOWFOdSs0WTJwa1lZM2hlT1RUY09Pbm9xUk5adGVqYzV4RmI5MHZjUDJDN2s4RllvOXZRMG1jdFdRMlFUZVRRbm92Sko1S1ZPNUMxdnZUL1ZDcFNoUlpMNUYvcnhoOXdCMGx4L1BoSEtZSG9qZkVVd3YwTFYxR3llUGZhZ1VVTVMyVkJ3VFR3cmhOdzhhN2oxVUdxT1I4S0hpUXhnRHEwamo5bjd2RlZSVzdwaVZ1SjRBMWdEUkpZMVM0OVJYVC90a2xRb0RMQWZGOVN5ZEVEbVFmak10UFVQb3NadW5nK2gxMk9qVFE4eGhoeWM0WEVYQ0RMRUtOcS92bzlPeEFRUkJhL0lGVTFBa0FiZkpsQnVFVGpGMVlmbFE3M09xVG0xVHQxbEVpRkp6SkgxZXRGZU5GNWxES1Y2SlVQa3B0UHRZaTgyZXU5MWUxbDBFcE1GRU9XRlpqZnV1cXBJZWpCV2ozNWpqRUFiRXN4cFo4WlpjR25GbnBHZ09TWklFWVJkeEw4ZE1CSVBFVjBJUkxDR3VZU2hDWitGeTd1cEFjZTMxUEdJVDZ2Q2FvU3hoQmFNOHpiTWpkckd0ekJHU3dpams0aUZiRmVSbVFRTWg0SjlqcTVnYVFIMWE1amdEVnFJYllsT1RXME9aaDlZcHFPTW9TU1lUejlYUlFvQVBGYjQ2aTd5dWRjTE0zL3NGakpEWGNJT0ppUWlTN1ZIdFJqaTEzb2dQRG1MYnA3Z1hMdldQVzg5UmQzK3h3emhob1V5eWE0YzQ1SjNTc0U5bE4vT2pMWmlVaEh5bU5qWjEwZGc5SU1sL0ZjMmlmYmh1WCtYZDB3dFVCOXpJSmgzSFdMVGxsTkYzY3pRUGx0bit5cnJVK0tlZmVxRjAxUDhXaDQ5dDZxZENTb1diZ2puMGR4M1lrYURMTCtHcnRSNjIzM3hWdHpMSFZzaXFxVzEzYVQ5SmF6elFGNzdqdk9zdm0vdWdGOU1pdHl3MVhmMHNqYUZpWUJFL1RWRVRlemVKVEQyekNmOWYzMWFRTXpUNXFRVGI3dEJUUE90cENnZFlpQUY5Snl1YU5WekVKRUFYN2pqS2ZTaXg0bDRKN0xuVGNJZGRaZ1FBTXdqMW9MdHJqRXZXQm9Xb1NDNEdKMWs3OFhqY0hhSHRtdGxvTmRNM3dKTGJ4WTF4bC80UkNEb2ZZK2d5eTRsNjVKbTBzSHZqOVZmMUl2M2tycjAyZjhoNDBCa0Eva2tkdEcxdU9yT0hpNkNsZld0VGR3djhGUW4vSm1xM0wxU0VscTNPWGtLeWpYTjBLUnRJbml3dHgwRGFtSXZXQzRxay9jOGl6Mi9YOElVVjRiQTBObUw3ajRHVDRqbThlYzJ0ay9UbExacFRVUTFGVWVaNHF0aHpXRXJDTDdSUGJ6N1FXbFVVcm1ibE1Vb1luZVlHLzcxMjlhdVBvT2hleUFoR1djRUtGK0FNamtCWTl1anBMNGlreTYzZlcrK21kVUo4UVBKaUVtdElJWVBDWUJjV3drMXdEcTIrRlU1VDk0YmRQRTZlSnJwSVVLUW5sK0pJaXF5M0preFVtNms4YTkyZHM1Z2YxQXp4UkpEdU9IMkowV2FVQXNSenk5YzV1ait6dXJCcURuM2s3Z3VHQmZIKzFzZXZoR25neXRRWTFtWm11QUkxSzJPNU5OSWJlaHhPZ2I5NHlCVTdNVEFnUy82dDJDVi9naXRLQThuVWpsOStxcExWZm5Dd2ZYMWJpYTZwVkxPWUJaSlM2WDNNVUVCVFJXK2ZaenZubVVITDJjVHFNLzVIeXg2NDZucmE3NVU0c1pKck5Qd3FqWG1DQWNyN2xVaGZOcWMzeDJSdnBFRTdHMm5NdzZTRUFFTGJQaTladXJBWGZaNDNUc2tVa1UyakRqSlRzRHRZZkw1bXpUWnh1ZmdEbnBFYmR1TzdoTHJRdHVUY2Rydm01YVhXaWx2WXJ3Rk81RXhST2NjWitBUXJMcnFhTXVuVmhwT24vMXhXSkN4cEkydlBTOTFJY050UlAwZ1k5VGtlWUdqNGRuTFdjMnpnc0k1UGY0YVRXNUl3ZzlTejhJVERQazFBZ3VJaEhJWVZ6cXJETEUybkR6WU0vODI4by9hQzN0Rkw3blUrd0t2SlBya2xBQldWNlFwLzhvbGI2WFdwN29GVkFrMzFyS1VDaEJaSU1uY1RDNzJmZTY4RS8xWGNlN0RYQis5Wmg5QVJic0xscWdiUDAxOWlYZmN0K0NTSkQ5aS9RbG0xVVJMR0krODZORFFoZVIwQ0w5QUdpR2ROQ21LSmsxUjVyVFFxdE5ZRFp6allVcG9GZ1l4MGx1ZllZVVNhTVNuc1lsbEhqSDlIcHNWNGZLQXJ2VU1Wc00rOThmQmk0T0czSURiQ0FKWlh1OGVDN0FRVmV6UmxLOVdoZkNRZ3dkbE15aVJUVWJhRy9lR2s2c2FWWm1CZ0w1eVVHbUFpZ2VrQ1BCa1ZvQlBpYXBHemVnK05TVzYweVNZcTFIU0VnNmtFWW9leXFiTmwrbkJCeGZtb3U1QUNEZUI1RFdsbmRqZktCMTduQ0lXWjFVL2hqVjdBbWxsWllZVWNsSVBaRStiTGlpODNxWHlnVFJEeUNQVktFcHNYRTh5OTN1VWNkZUg3Q0dNWk9OYmw4Rk5FR0dKc0MrVEpudVUwVHZKNjFtcnF4UE1xenNsQWxMZ1VrcGhhRjhHbittcXpoaVg3NXlEYnFJZE1oS2x5VDFWWnJ4ZFZZSTU5WklJMnpJMTk1Ylh2cnV1ajJDd0hzTW1iKzFscHFPanZYRXc4UkZNUFh0eG1hSzRXcE5YL0hIOEIxQjJTbEhTQXk0MU9HMUpCR1Z2TGkrRTJsblE0ME03dFVEWlh3Vkl6QTFPa0ZaWTJpRWhiM0p5dUx4QXc0YlhGMWplb1dPd3VEOUZFU1BuNlNtckxUUDZQUDVCQ0FqSmo1QVEyTnNrWnFidGJyYzRlTHY5Z0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBY0tEcz0ifYGCBv97IkFsaWNlIjogeyJkaWxpdGhpdW1fcHVibGljX2tleSI6ICJ1b0dONnFLQnpRZk5PZjRtK0ZxTTc3UVlnQXRwR1JxNjVXNTh2amhaOGhzSkcwZXVzUC9RazdBL3dTdkhIN0pVNzQ5aklnNGpidnVGak91Z1oyUG5uTkxvd1VlRmk5ODNscmt0ZWtZbXp1M3NJaUhFZlB2UFE0WURkTGhIdEZJNnFyVzF6T2s2TXp6VUxvQndQOG5IajJJRXA5UEpQNUU0WUVwVFE2NnRFY1RROWtyZitXdHBneWkwNy9GOVo0NEdtdUpqN0I4Z00xL3M4R0F5NTc2VkNPaHY2Myt6a29MZTFpYW12Y0ZkdGNVU3VYWmJTaldHQzJhYjd3WkwrSWM2OCsxdVUvbGl5WHdvSW4zMDdSM29NWGdNbGdUVFh4dEo3eWEzN1dkbkJKNHBrR3Y1WUxOMEtIV0REUFd2V0ZjcWMzM2pNTTJXVWVpbEtJN1pIeHIyMk9RRFZHVmFxYmZzVEhCaXpjSlZESjUyTjZDYU16ZWg1c3FPRDlEZzV2Y01kT1dQTUxMRHF3U2ttL0VhU2RQSzZzSy9oSVFLbmpwcm02VnluemswZGlocjdWSVdFb2wxSWxnVEJBY1BUNFZOTlJZU3FDbVo3VGdlZXFPZ3lWeUE5MnJNazhJaHhuWW5RNGRnNnRVZmpvVGxsaWE5WmZCWWdiNW4wRW54OWdROHY3c1hHT0RlcjZQdzhHSzYyaFRsMiswY1lmOHBOb0NjVHZxckhXOXM0ZmtkZENyUXRQVTdHVUZGUkZqOVBMamVyNVB1VEtZTnNJTGFFMmRlVS9zZXJoTDVBSFZwamt4K0NUYmpnMURkMVdZL01wNVM1QkEvSkhYWnRocFMyeGFUMko0bUJhenhOWEs0NkxxV1EvT3J4Q1ZGTFpxM2tJd0l0Z1hwM0wxYmg3N0FkZHVlWHBJOFRCMnk3bzE2RTY0Z212aHRwQ0cxS2FkbWRUYkQ2SzVhMjZUQ1owMGRKRFNYRFI3c1QzOFBtUVBua1dheDMyYWlVVGFzT2gveXZhSnRmc1BvMUZxM0x4WDd4S1JZQ2pOTHQ3UWRsTjlxZWdoMXBnOXlac1Q2NkpqL0FIZ3d3SGNJcE9Ib3dJNjhhaFlmYmFvQkVUMHljdUFSTjQ3Y2kyQUJaZmNZcFFIZy9oRmRpcXd3Um5RMUx1ZHlhVDk5QmozMkZFeVFEV1ZwOHhEUGd3Z3RKNy9Fd0lSQTlaNm45dmx1Yk1hZ3lhdWh3YmtUSEJJZy9BYUZDYjZsSUMxRFpIMFFRc1NRYVN6Sk9nbmZ1QldsU1BxMXMyblZKUzRTYkhSUGVHdWtJLzJUZXkvUnNqMzRuZGlrTUJJV3haaHA5TWcxd0ZrcC82M21Xbm5ET2JOc3MwMitFdmRzd29hbU41d08vSDJGS3VPN20wNE5MOHIvOFZMa1cxdVdEaFVFNTVERGk5ZHVpZC84V1N5dlErUmtkS1dWMkxzUm1XaHZBaWRjUGlTS2pDUVZSY09CYmtsUkFnTnNVWTQ0aUZYMUJ5UG92S1NGTHdhTlJ4VDhHbWFsd25aQ3lBOTlPQ2taRHBrUUZnSUt2VFFBVDZZVkQ2UysySUo4YXk1SmZhdnJRWm1CV3RGeUVETEJKWTFKUGdDOUlxUjRqRDFlRUpBMmNmQ05PZm5uVHJSZWw1WWRZczBEajJKTlM1cnhNWlNseXBIUkR4WG5jcXhIcDFEYXhRU0NDSDlmKyt1cDgwWmh5ZXpZR0hONWRtUWJhdE5OUjRTeVorNUF6Z1dkKzBkalNSUDdLSXlTenc3c1JjOVZPdE9aYWlZV0o5VkxXQldPV0lFcko5bExqeHdPRlFXRkxUNnBnd2RQcmw2SUNxMGJmaGM3MlQxNW1RQWdTckhIc1hYYTFyUUxPbDFoUHBWK1VBMC9ZdXdZSzNzLzZrTVZuU0RadUkxYzRDanlKQ1BvbUNaU0NVeTk0bmJwQUZ2MTNkRWRPS2RqT0NZdno0NDY0NmVvbVZNeGxJSFBuK3ROQkpEWWNyMGg5NC9UR1ZhaW1wenY4MnU4Q2dlbnZMK0VOWVEwQkRmNkVvd3c0V3hWQzgvMlhmSjJ5ZGNkMnRUVUIyd01UZ3FBdFluUUg3Tm5zd2xGSFdWZlhndXhwL0pRMENUcExkQ2JXbG5GYlRNVVVFYjNmdW9Sa0J5b0VrL0d0NjZaSkdFNU45Q0N2dHEvZVVpNUE1OFAxL3RjWUM1ZTFJYlJxUnhoRVo2RkRnam9uZHNXS3IweXliQWs3ZXJXM0hGZlNaQnJ0dXV1SVd0TjdKc0xmQVc3WGdxUnVQVHhKci9EUWcxeGZRMU9uMEE4WC9sSHpBPT0ifX0",
"owners_before": [
"5Uv4KLinWJpKFagfab9r3P9jMRJhWMZv3CgRdBZZ4vvb"
]
}
],
"metadata": {
"data": [],
"oracleTimestamp": "1657027260276",
"result": {
"output": [
"ok"
]
}
},
"operation": "CREATE",
"outputs": [
{
"amount": "1",
"condition": {
"details": {
"public_key": "JLmXctACFNiYRMatskgW2AM8nJa93kxonqYB21mDxMDkhajmrJRogWZfJfhs",
"type": "zenroom-sha-256"
},
"uri": "ni:///sha-256;M5IggboqrqqJiPNo13xwJ2Ov5K4XCOgLam79EAGIYSE?fpt=zenroom-sha-256&cost=131072"
},
"public_keys": [
"5Uv4KLinWJpKFagfab9r3P9jMRJhWMZv3CgRdBZZ4vvb"
]
}
],
"version": "2.0"
},
"zenroom": {
"data": {
"asset": {
"houses": [
{
"name": "Harry",
"team": "Gryffindor"
},
{
"name": "Draco",
"team": "Slytherin"
}
],
"number": 42
},
"output": {
"dilithium_signature": "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"
},
"result": []
},
"keys": {
"Alice": {
"dilithium_public_key": "uoGN6qKBzQfNOf4m+FqM77QYgAtpGRq65W58vjhZ8hsJG0eusP/Qk7A/wSvHH7JU749jIg4jbvuFjOugZ2PnnNLowUeFi983lrktekYmzu3sIiHEfPvPQ4YDdLhHtFI6qrW1zOk6MzzULoBwP8nHj2IEp9PJP5E4YEpTQ66tEcTQ9krf+Wtpgyi07/F9Z44GmuJj7B8gM1/s8GAy576VCOhv63+zkoLe1iamvcFdtcUSuXZbSjWGC2ab7wZL+Ic68+1uU/liyXwoIn307R3oMXgMlgTTXxtJ7ya37WdnBJ4pkGv5YLN0KHWDDPWvWFcqc33jMM2WUeilKI7ZHxr22OQDVGVaqbfsTHBizcJVDJ52N6CaMzeh5sqOD9Dg5vcMdOWPMLLDqwSkm/EaSdPK6sK/hIQKnjprm6Vynzk0dihr7VIWEol1IlgTBAcPT4VNNRYSqCmZ7TgeeqOgyVyA92rMk8IhxnYnQ4dg6tUfjoTllia9ZfBYgb5n0Enx9gQ8v7sXGODer6Pw8GK62hTl2+0cYf8pNoCcTvqrHW9s4fkddCrQtPU7GUFFRFj9PLjer5PuTKYNsILaE2deU/serhL5AHVpjkx+CTbjg1Dd1WY/Mp5S5BA/JHXZthpS2xaT2J4mBazxNXK46LqWQ/OrxCVFLZq3kIwItgXp3L1bh77AddueXpI8TB2y7o16E64gmvhtpCG1KadmdTbD6K5a26TCZ00dJDSXDR7sT38PmQPnkWax32aiUTasOh/yvaJtfsPo1Fq3LxX7xKRYCjNLt7QdlN9qegh1pg9yZsT66Jj/AHgwwHcIpOHowI68ahYfbaoBET0ycuARN47ci2ABZfcYpQHg/hFdiqwwRnQ1LudyaT99Bj32FEyQDWVp8xDPgwgtJ7/EwIRA9Z6n9vlubMagyauhwbkTHBIg/AaFCb6lIC1DZH0QQsSQaSzJOgnfuBWlSPq1s2nVJS4SbHRPeGukI/2Tey/Rsj34ndikMBIWxZhp9Mg1wFkp/63mWnnDObNss02+EvdswoamN5wO/H2FKuO7m04NL8r/8VLkW1uWDhUE55DDi9duid/8WSyvQ+RkdKWV2LsRmWhvAidcPiSKjCQVRcOBbklRAgNsUY44iFX1ByPovKSFLwaNRxT8GmalwnZCyA99OCkZDpkQFgIKvTQAT6YVD6S+2IJ8ay5JfavrQZmBWtFyEDLBJY1JPgC9IqR4jD1eEJA2cfCNOfnnTrRel5YdYs0Dj2JNS5rxMZSlypHRDxXncqxHp1DaxQSCCH9f++up80ZhyezYGHN5dmQbatNNR4SyZ+5AzgWd+0djSRP7KIySzw7sRc9VOtOZaiYWJ9VLWBWOWIErJ9lLjxwOFQWFLT6pgwdPrl6ICq0bfhc72T15mQAgSrHHsXXa1rQLOl1hPpV+UA0/YuwYK3s/6kMVnSDZuI1c4CjyJCPomCZSCUy94nbpAFv13dEdOKdjOCYvz44646eomVMxlIHPn+tNBJDYcr0h94/TGVaimpzv82u8CgenvL+ENYQ0BDf6Eoww4WxVC8/2XfJ2ydcd2tTUB2wMTgqAtYnQH7NnswlFHWVfXguxp/JQ0CTpLdCbWlnFbTMUUEb3fuoRkByoEk/Gt66ZJGE5N9CCvtq/eUi5A58P1/tcYC5e1IbRqRxhEZ6FDgjondsWKr0yybAk7erW3HFfSZBrtuuuIWtN7JsLfAW7XgqRuPTxJr/DQg1xfQ1On0A8X/lHzA=="
}
}
},
"zenroom_fulfillment": {
"zenroomSha256": {
"data": {
"dilithium_signature": "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"
},
"keys": {
"Alice": {
"dilithium_public_key": "uoGN6qKBzQfNOf4m+FqM77QYgAtpGRq65W58vjhZ8hsJG0eusP/Qk7A/wSvHH7JU749jIg4jbvuFjOugZ2PnnNLowUeFi983lrktekYmzu3sIiHEfPvPQ4YDdLhHtFI6qrW1zOk6MzzULoBwP8nHj2IEp9PJP5E4YEpTQ66tEcTQ9krf+Wtpgyi07/F9Z44GmuJj7B8gM1/s8GAy576VCOhv63+zkoLe1iamvcFdtcUSuXZbSjWGC2ab7wZL+Ic68+1uU/liyXwoIn307R3oMXgMlgTTXxtJ7ya37WdnBJ4pkGv5YLN0KHWDDPWvWFcqc33jMM2WUeilKI7ZHxr22OQDVGVaqbfsTHBizcJVDJ52N6CaMzeh5sqOD9Dg5vcMdOWPMLLDqwSkm/EaSdPK6sK/hIQKnjprm6Vynzk0dihr7VIWEol1IlgTBAcPT4VNNRYSqCmZ7TgeeqOgyVyA92rMk8IhxnYnQ4dg6tUfjoTllia9ZfBYgb5n0Enx9gQ8v7sXGODer6Pw8GK62hTl2+0cYf8pNoCcTvqrHW9s4fkddCrQtPU7GUFFRFj9PLjer5PuTKYNsILaE2deU/serhL5AHVpjkx+CTbjg1Dd1WY/Mp5S5BA/JHXZthpS2xaT2J4mBazxNXK46LqWQ/OrxCVFLZq3kIwItgXp3L1bh77AddueXpI8TB2y7o16E64gmvhtpCG1KadmdTbD6K5a26TCZ00dJDSXDR7sT38PmQPnkWax32aiUTasOh/yvaJtfsPo1Fq3LxX7xKRYCjNLt7QdlN9qegh1pg9yZsT66Jj/AHgwwHcIpOHowI68ahYfbaoBET0ycuARN47ci2ABZfcYpQHg/hFdiqwwRnQ1LudyaT99Bj32FEyQDWVp8xDPgwgtJ7/EwIRA9Z6n9vlubMagyauhwbkTHBIg/AaFCb6lIC1DZH0QQsSQaSzJOgnfuBWlSPq1s2nVJS4SbHRPeGukI/2Tey/Rsj34ndikMBIWxZhp9Mg1wFkp/63mWnnDObNss02+EvdswoamN5wO/H2FKuO7m04NL8r/8VLkW1uWDhUE55DDi9duid/8WSyvQ+RkdKWV2LsRmWhvAidcPiSKjCQVRcOBbklRAgNsUY44iFX1ByPovKSFLwaNRxT8GmalwnZCyA99OCkZDpkQFgIKvTQAT6YVD6S+2IJ8ay5JfavrQZmBWtFyEDLBJY1JPgC9IqR4jD1eEJA2cfCNOfnnTrRel5YdYs0Dj2JNS5rxMZSlypHRDxXncqxHp1DaxQSCCH9f++up80ZhyezYGHN5dmQbatNNR4SyZ+5AzgWd+0djSRP7KIySzw7sRc9VOtOZaiYWJ9VLWBWOWIErJ9lLjxwOFQWFLT6pgwdPrl6ICq0bfhc72T15mQAgSrHHsXXa1rQLOl1hPpV+UA0/YuwYK3s/6kMVnSDZuI1c4CjyJCPomCZSCUy94nbpAFv13dEdOKdjOCYvz44646eomVMxlIHPn+tNBJDYcr0h94/TGVaimpzv82u8CgenvL+ENYQ0BDf6Eoww4WxVC8/2XfJ2ydcd2tTUB2wMTgqAtYnQH7NnswlFHWVfXguxp/JQ0CTpLdCbWlnFbTMUUEb3fuoRkByoEk/Gt66ZJGE5N9CCvtq/eUi5A58P1/tcYC5e1IbRqRxhEZ6FDgjondsWKr0yybAk7erW3HFfSZBrtuuuIWtN7JsLfAW7XgqRuPTxJr/DQg1xfQ1On0A8X/lHzA=="
}
},
"script": "Scenario 'qp': Bob verifies the signature from Alice\nGiven I have a 'dilithium public key' from 'Alice'\nGiven that I have a 'string dictionary' named 'houses' inside 'asset'\nGiven I have a 'dilithium signature' named 'dilithium signature' in 'output'\nWhen I verify the 'houses' has a dilithium signature in 'dilithium signature' by 'Alice'\nThen print the string 'ok'\n"
}
}
},
"status": 200
}
}
- Error Response:
Code: 200
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-http-post]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm0.dyne.org:20003/api/zenswarm-oracle-execute-zencode-planetmint.chain' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"asset": {
"data": {
"houses": [
{
"name": "Harry",
"team": "Gryffindor"
},
{
"name": "Draco",
"team": "Slytherin"
}
],
"number": 42
}
},
"metadata": {
"data": {}
},
"keys": {
"Alice": {
"dilithium_public_key": "uoGN6qKBzQfNOf4m+FqM77QYgAtpGRq65W58vjhZ8hsJG0eusP/Qk7A/wSvHH7JU749jIg4jbvuFjOugZ2PnnNLowUeFi983lrktekYmzu3sIiHEfPvPQ4YDdLhHtFI6qrW1zOk6MzzULoBwP8nHj2IEp9PJP5E4YEpTQ66tEcTQ9krf+Wtpgyi07/F9Z44GmuJj7B8gM1/s8GAy576VCOhv63+zkoLe1iamvcFdtcUSuXZbSjWGC2ab7wZL+Ic68+1uU/liyXwoIn307R3oMXgMlgTTXxtJ7ya37WdnBJ4pkGv5YLN0KHWDDPWvWFcqc33jMM2WUeilKI7ZHxr22OQDVGVaqbfsTHBizcJVDJ52N6CaMzeh5sqOD9Dg5vcMdOWPMLLDqwSkm/EaSdPK6sK/hIQKnjprm6Vynzk0dihr7VIWEol1IlgTBAcPT4VNNRYSqCmZ7TgeeqOgyVyA92rMk8IhxnYnQ4dg6tUfjoTllia9ZfBYgb5n0Enx9gQ8v7sXGODer6Pw8GK62hTl2+0cYf8pNoCcTvqrHW9s4fkddCrQtPU7GUFFRFj9PLjer5PuTKYNsILaE2deU/serhL5AHVpjkx+CTbjg1Dd1WY/Mp5S5BA/JHXZthpS2xaT2J4mBazxNXK46LqWQ/OrxCVFLZq3kIwItgXp3L1bh77AddueXpI8TB2y7o16E64gmvhtpCG1KadmdTbD6K5a26TCZ00dJDSXDR7sT38PmQPnkWax32aiUTasOh/yvaJtfsPo1Fq3LxX7xKRYCjNLt7QdlN9qegh1pg9yZsT66Jj/AHgwwHcIpOHowI68ahYfbaoBET0ycuARN47ci2ABZfcYpQHg/hFdiqwwRnQ1LudyaT99Bj32FEyQDWVp8xDPgwgtJ7/EwIRA9Z6n9vlubMagyauhwbkTHBIg/AaFCb6lIC1DZH0QQsSQaSzJOgnfuBWlSPq1s2nVJS4SbHRPeGukI/2Tey/Rsj34ndikMBIWxZhp9Mg1wFkp/63mWnnDObNss02+EvdswoamN5wO/H2FKuO7m04NL8r/8VLkW1uWDhUE55DDi9duid/8WSyvQ+RkdKWV2LsRmWhvAidcPiSKjCQVRcOBbklRAgNsUY44iFX1ByPovKSFLwaNRxT8GmalwnZCyA99OCkZDpkQFgIKvTQAT6YVD6S+2IJ8ay5JfavrQZmBWtFyEDLBJY1JPgC9IqR4jD1eEJA2cfCNOfnnTrRel5YdYs0Dj2JNS5rxMZSlypHRDxXncqxHp1DaxQSCCH9f++up80ZhyezYGHN5dmQbatNNR4SyZ+5AzgWd+0djSRP7KIySzw7sRc9VOtOZaiYWJ9VLWBWOWIErJ9lLjxwOFQWFLT6pgwdPrl6ICq0bfhc72T15mQAgSrHHsXXa1rQLOl1hPpV+UA0/YuwYK3s/6kMVnSDZuI1c4CjyJCPomCZSCUy94nbpAFv13dEdOKdjOCYvz44646eomVMxlIHPn+tNBJDYcr0h94/TGVaimpzv82u8CgenvL+ENYQ0BDf6Eoww4WxVC8/2XfJ2ydcd2tTUB2wMTgqAtYnQH7NnswlFHWVfXguxp/JQ0CTpLdCbWlnFbTMUUEb3fuoRkByoEk/Gt66ZJGE5N9CCvtq/eUi5A58P1/tcYC5e1IbRqRxhEZ6FDgjondsWKr0yybAk7erW3HFfSZBrtuuuIWtN7JsLfAW7XgqRuPTxJr/DQg1xfQ1On0A8X/lHzA=="
}
},
"data": {
"dilithium_signature": "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"
},
"script": "Scenario '\''qp'\'': Bob verifies the signature from Alice\nGiven I have a '\''dilithium public key'\'' from '\''Alice'\''\nGiven that I have a '\''string dictionary'\'' named '\''houses'\'' inside '\''asset'\''\nGiven I have a '\''dilithium signature'\'' named '\''dilithium signature'\'' in '\''output'\''\nWhen I verify the '\''houses'\'' has a dilithium signature in '\''dilithium signature'\'' by '\''Alice'\''\nThen print the string '\''ok'\''\n"
},
"keys": {}
}'
Set the random seed to the transaction id, choose 6 random Orcales and returns the json data containing the responses obtained from the POST made by the selected Oracles and a string that describe the result.
-
URL
/api/zenswarm-post-6-rand-oracles.chain
-
Method:
POST
-
Data Params
post{data={Input to the HTTP Post API}}
txId={transaction id}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"consensus": "all_results_are_equal",
"result": [
{
"result": {
"output": {
"result": {
"data": []
},
"status": 200
}
},
"status": 200
},
{
"result": {
"output": {
"result": {
"data": []
},
"status": 200
}
},
"status": 200
},
{
"result": {
"output": {
"result": {
"data": []
},
"status": 200
}
},
"status": 200
},
{
"result": {
"output": {
"result": {
"data": []
},
"status": 200
}
},
"status": 200
},
{
"result": {
"output": {
"result": {
"data": []
},
"status": 200
}
},
"status": 200
},
{
"result": {
"output": {
"result": {
"data": []
},
"status": 200
}
},
"status": 200
}
]
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-post-6-rand-oracles.chain]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-post-6-rand-oracles.chain' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"txId": "94d5a744e8a4d8153cda90a900fdeba5b763a945411f3f7ebe33c7d54b91bbf0",
"post": {
"data": {
"post": {
"id": "01FSKCT2BR8326ZEM6F6C4STWM",
"recurseLimit": 2
},
"endpoint": "https://reflow-demo.dyne.org/api/json/trace"
}
}
},
"keys": {}
}'
Retrieve a transaction in the fabric blockchain starting from its transaction id.
-
URL
/api/zenswarm-read-from-fabric
-
Method:
POST
-
Data Params
txId={transaction id}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": {
"city": "Berlin",
"temperature": "22",
"Country": "DE"
}
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-read-from-fabric]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-read-from-fabric' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"txId": "6038da8073e567a8e819032ce8c15ffdf1d7b9aae9cbd53e9c2ffcf84a8057ec"
},
"keys": {}
}'
Store data on the fabric blockchain and return the transaction id.
-
URL
/api/zenswarm-write-on-fabric
-
Method:
POST
-
Data Params
input={data to store}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"input": {
"city": "Berlin",
"temperature": "22",
"Country": "DE"
},
"txId": "6038da8073e567a8e819032ce8c15ffdf1d7b9aae9cbd53e9c2ffcf84a8057ec"
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-write-on-fabric]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-write-on-fabric' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"input": {
"city": "Berlin",
"temperature": "22",
"Country": "DE"
}
},
"keys": {}
}'
Retrieve a transaction in the ethereum blockchain (fabchain) starting from its transaction id.
-
URL
/api/zenswarm-read-from-ethereum
-
Method:
POST
-
Data Params
txId={transaction id}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": {
"city": "Berlin",
"temperature": "22",
"Country": "DE"
}
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-read-from-ethereum]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-read-from-ethereum' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"txId": "587392b3e3ab7c2aa5c7a6d67282d5274152fcf555438d9c5fa547a303bda595"
},
"keys": {}
}'
Store data on the ethereum blockchain (fabchain) and return the transaction id.
-
URL
/api/zenswarm-write-on-ethereum.chain
-
Method:
POST
-
Data Params
input={data to store}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"ethereum_transaction": {
"data": "b374012b0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003783a7436f756e747279c700000003524555a463697479c700000008516d567962476c75ab74656d7065726174757265c7000000034d6a49000000000000000000",
"gas_limit": "1000000",
"gas_price": "1000000000",
"nonce": "5943",
"r": "20856933781bbc7e9df17065cdf2bf3c1a8e508e0e7c2236968324b7c08a184e",
"s": "3eed335c5fdf891874534601589ab4c15561afe0dd16480ec75f712f295c21b4",
"to": "1b620ca5172a8d6a64798fca2ee690066f7a7816",
"v": "ccc2c50b",
"value": "0"
},
"signed_ethereum_transaction": "f8ef821737843b9aca00830f4240941b620ca5172a8d6a64798fca2ee690066f7a781680b884b374012b0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003783a7436f756e747279c700000003524555a463697479c700000008516d567962476c75ab74656d7065726174757265c7000000034d6a4900000000000000000084ccc2c50ba020856933781bbc7e9df17065cdf2bf3c1a8e508e0e7c2236968324b7c08a184ea03eed335c5fdf891874534601589ab4c15561afe0dd16480ec75f712f295c21b4",
"txId": "587392b3e3ab7c2aa5c7a6d67282d5274152fcf555438d9c5fa547a303bda595"
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-write-on-ethereum.chain]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-write-on-ethereum.chain' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"input": {
"city": "Berlin",
"temperature": "22",
"Country": "DE"
}
},
"keys": {}
}'
Retrieve a transaction in the planetmint blockchain starting from its transaction id.
-
URL
/api/zenswarm-read-from-planetmint
-
Method:
POST
-
Data Params
txId={transaction id}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": {
"asset": {
"data": {
"Country": "DE",
"city": "Berlin",
"temperature": "22"
}
},
"metadata": {
"encoding": "Zenroom",
"origin": "apiroom.net",
"ruler": "Dyne.org",
"timestamp": "1657119595165"
}
}
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-read-from-planetmint]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-read-from-planetmint' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"txId": "4d2cebc509b0f2f5ce0dcf69ca49bcfe181ed437a174a538379f8824ae2e78ca"
},
"keys": {}
}'
Store data on the planetmint blockchain and return the transaction id.
-
URL
/api/zenswarm-write-on-planetmint
-
Method:
POST
-
Data Params
input={data to store}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"asset": {
"Country": "DE",
"city": "Berlin",
"temperature": "22"
},
"ed25519_keypair": {
"private_key": "5Jgk9ARKbPXRwPCuVHv94M4q9iKpF67Apk6hP3rRLtby",
"public_key": "Mx2D1WbAdREJphfuAcRCge54zMndKfmozynzRZYP5aw"
},
"metadata": {
"encoding": "Zenroom",
"origin": "apiroom.net",
"ruler": "Dyne.org",
"timestamp": "1657120723370"
},
"planetmint_transaction": "eyJpZCI6bnVsbCwib3BlcmF0aW9uIjoiQ1JFQVRFIiwib3V0cHV0cyI6W3siY29uZGl0aW9uIjp7ImRldGFpbHMiOnsidHlwZSI6ImVkMjU1MTktc2hhLTI1NiIsInB1YmxpY19rZXkiOiJNeDJEMVdiQWRSRUpwaGZ1QWNSQ2dlNTR6TW5kS2Ztb3p5bnpSWllQNWF3In0sInVyaSI6Im5pOi8vL3NoYS0yNTY7X0JDSUZ4Y25fR0VjUVR2T0tBOTh1WHZtazc0WHlQTEQ0M25MZTdoaEFYZz9mcHQ9ZWQyNTUxOS1zaGEtMjU2JmNvc3Q9MTMxMDcyIn0sImFtb3VudCI6IjEiLCJwdWJsaWNfa2V5cyI6WyJNeDJEMVdiQWRSRUpwaGZ1QWNSQ2dlNTR6TW5kS2Ztb3p5bnpSWllQNWF3Il19XSwiaW5wdXRzIjpbeyJmdWxmaWxsbWVudCI6bnVsbCwiZnVsZmlsbHMiOm51bGwsIm93bmVyc19iZWZvcmUiOlsiTXgyRDFXYkFkUkVKcGhmdUFjUkNnZTU0ek1uZEtmbW96eW56UlpZUDVhdyJdfV0sIm1ldGFkYXRhIjp7ImVuY29kaW5nIjoiWmVucm9vbSIsIm9yaWdpbiI6ImFwaXJvb20ubmV0IiwicnVsZXIiOiJEeW5lLm9yZyIsInRpbWVzdGFtcCI6IjE2NTcxMjA3MjMzNzAifSwiYXNzZXQiOnsiZGF0YSI6eyJDb3VudHJ5IjoiREUiLCJjaXR5IjoiQmVybGluIiwidGVtcGVyYXR1cmUiOiIyMiJ9fSwidmVyc2lvbiI6IjIuMCJ9",
"signed_planetmint_transaction": "eyJpZCI6IjRkMmNlYmM1MDliMGYyZjVjZTBkY2Y2OWNhNDliY2ZlMTgxZWQ0MzdhMTc0YTUzODM3OWY4ODI0YWUyZTc4Y2EiLCJvcGVyYXRpb24iOiJDUkVBVEUiLCJvdXRwdXRzIjpbeyJjb25kaXRpb24iOnsiZGV0YWlscyI6eyJ0eXBlIjoiZWQyNTUxOS1zaGEtMjU2IiwicHVibGljX2tleSI6Ik14MkQxV2JBZFJFSnBoZnVBY1JDZ2U1NHpNbmRLZm1venluelJaWVA1YXcifSwidXJpIjoibmk6Ly8vc2hhLTI1NjtfQkNJRnhjbl9HRWNRVHZPS0E5OHVYdm1rNzRYeVBMRDQzbkxlN2hoQVhnP2ZwdD1lZDI1NTE5LXNoYS0yNTYmY29zdD0xMzEwNzIifSwiYW1vdW50IjoiMSIsInB1YmxpY19rZXlzIjpbIk14MkQxV2JBZFJFSnBoZnVBY1JDZ2U1NHpNbmRLZm1venluelJaWVA1YXciXX1dLCJpbnB1dHMiOlt7ImZ1bGZpbGxtZW50IjoicEdTQUlBVmQxQkstMTRjclFncjFObXhwbW9ZR09FR25rT1NfOF9hQ3lDVzJiS0lnZ1VEczcyNjBiUlhfczJSaG13ZXpBYi05U2ZmN0JCcFQwZ0gzODZMS0puUkdYRE5sUnJKV1hVeDd2MzBjenBJT1Y2MGZTMFhLTTRyOFhYaFJjWXhsdWdnSiIsImZ1bGZpbGxzIjpudWxsLCJvd25lcnNfYmVmb3JlIjpbIk14MkQxV2JBZFJFSnBoZnVBY1JDZ2U1NHpNbmRLZm1venluelJaWVA1YXciXX1dLCJtZXRhZGF0YSI6eyJlbmNvZGluZyI6IlplbnJvb20iLCJvcmlnaW4iOiJhcGlyb29tLm5ldCIsInJ1bGVyIjoiRHluZS5vcmciLCJ0aW1lc3RhbXAiOiIxNjU3MTIwNzIzMzcwIn0sImFzc2V0Ijp7ImRhdGEiOnsiQ291bnRyeSI6IkRFIiwiY2l0eSI6IkJlcmxpbiIsInRlbXBlcmF0dXJlIjoiMjIifX0sInZlcnNpb24iOiIyLjAifQ==",
"txid": "4d2cebc509b0f2f5ce0dcf69ca49bcfe181ed437a174a538379f8824ae2e78ca"
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-write-on-planetmint]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-write-on-planetmint' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"input": {
"city": "Berlin",
"temperature": "22",
"Country": "DE"
}
},
"keys": {}
}'
Verify a dilithium signature.
-
URL
/api/zenswarm-oracle-verify-dilithium
-
Method:
POST
-
Data Params
asset={data}
dilithium signature={dilithium signature of asset}
dilithium public key={dilithium public key}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": [
"The_Dilithium_signature_was_verified"
]
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-verify-dilithium]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-oracle-verify-dilithium' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data":{
"asset": {
"data": {
"houses": [
{
"name": "Harry",
"team": "Gryffindor"
},
{
"name": "Draco",
"team": "Slytherin"
}
],
"number": 42
}
},
"dilithium_public_key": "eOUylAAO4CnCEQucRc2BCzRR2xllRjavEQzmeuFH9PneXL4yO/JRthF9ZHS+YqAzvk0LgNHIAXigY+MnAHdpLc32UGNO2P27g8jIPY5fuS3MbphfZUee0j6yrxUSpZzSYkAC/V0go0rqSOcCUomFb3JL3pM4zO28N6QSi0T8Hj4wxJhRAsdTMdLIGw2NS2J/6APJ1wZ/nkUI09CnTOswifylP/8MvxANuJffuh/OTIIP0nGutifyQ3seFftoshx+yiFD/NXgYwVmeXKBKxnoM53g2gDKnn1gYVYrkIeWqNvhonaIH2pYhMnnzUn3CURU/duE4gigGtiOmEnBlAqDt5uACOGybFc2s3aR50R9YC56P8T1FvCQTaptiJybQChkJgfcFN+FA98+0Fi+YBqxjGICiiOVPppmN38yOiYwmcgV+C2bBhqyuamU6NdCX8LqjgRUV9Oh+wNxVLp5IR7LWp8oAp+dDZgGfsORBBtUzUsJut//760oSYZgliDCgvzPu0jx2EYhwc/ddwqfA8aIZ8xxtRsn3Ijc5k9109/KVVAhWjLQDYqBugvyKmlTeWYiFSkZZGCnsfB8hyJO5pt+7kipYG5GtpQ/qmi0Q6tuDvLzE6yjZWPr2uJVlyUOW2rG2URLk/XheXRAL8yGFg9YONIE0DBIy1dBr6gMJXXZfgDPleMDlZwASegvgPSP69cpJccFI9N6eGCDLmclrTalnMI5/jCRWAQlbXEBo/abZ7BWVUMllMc0CPTpYzd484ZbIFIk13lYcrxOSoIbZWRorYWtK4A0Ja6JjuSrtSqmV+Ru6CzWSmQGQ0mL6voe2a/aiOuhNwDr8ndUPXbr1ILM5zrOvesamepjzOOqZphaNp7GtyYpGMBw1yezmsC5q+xaAlMwkfOGVfLnBfYvwbDtzeNlDmjpaWTk36xYgnp2Gv9f44SQ7tCmLnOY3BGuo/ELi9h1mhjLIy/yaGQcJefCNIEOESgT2kq+e8zZJ3csh0ZzXkUEy6kgD1n2fLKnoNYXpYi5pMKOLOmhAELI0gp5mFr8rj8T2JiSRIyKj6Z3pCxhgQQPMcYhqQWKdij2UknL1Q6U9fYvKsiYjFJPJkuunOb6cKMS0aGL53Y4MgIHI2xYNW1uhH59roMBi5HPVGqZR6nd734OTVLVtyL8pKGhPmcmojI1HPiiud6nYY5XYRwev4JdPtMZbcEIUGS0RcPUF3whm0uCZLmg9nFwXo7BSQiXh8PL/mOrDc1BO2b5wV0iZ5usJtdwbMUeQonMkaC0Uf9CH/obvi1SXb46ThRqv7gEbxos1oWwb+SJvAKgeA5y4RnZc4rc0nGlQU8e3pNojfLl2J58aa+5RI7MXltYTSDzlQBOb/RPrez01V58WgaIMnThl06y5g7v6TZX4Tafi2Qg3eBloB3ixd1wEYbe6Ax6/Mo6PbUoY1LW3pRqD8jzqaTm87mACSiO8MZiXYq0EYfTqFAln6RGIa4/PB+YSvd2xmPMivSVF1xvEMuuM2WYNj998hmf9GuefKs2ao1eeUGxwZu0s3JlCHMEp+SgboeitAF+l7hxK8l7goW35AS16auAD4zoZYkC0koKoWR6ScQ+kZfmeNLR02Tkgqcc5HP51QkWItbNSl3uS4n55CCU0bmF5YXkeHINWkGLmTDo/lJvCIMYfsrX8KKZbUrhuF+DAtQ2Cofx7y3wHjTGSdnwQ4rOWyJNLQ2pU7mmBb7At7HeYFMrq6XEe3YhUD1XLw==",
"dilithium_signature": "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"
},
"keys": {}
}'
Verify a ecdsa signature.
-
URL
/api/zenswarm-oracle-verify-ecdsa
-
Method:
POST
-
Data Params
asset={data}
ecdsa signature={ecdsa signature of asset}
ecdsa public key={ecdsa public key}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": [
"The_ECDSA_signature_was_verified"
]
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-verify-ecdsa]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-oracle-verify-ecdsa' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data":{
"asset": {
"data": {
"houses": [
{
"name": "Harry",
"team": "Gryffindor"
},
{
"name": "Draco",
"team": "Slytherin"
}
],
"number": 42
}
},
"ecdsa signature": {
"r": "TOmfgO7blPNnuODhAtIBYWQEOqsv6vVhknLSbcDb0Dc=",
"s": "WirTGe4s1mbpCJ4N1y0nPwvi+q6bYAdDJq+q3EMDFGM="
},
"ecdsa_public_key": "BGrFCQHQ9D3Nh7hN1xCubXrRUjJl/Uvg+76kdfY4pJRhezxREKQFSEvsghRCiavo5mQhnwfQ79oz03obR4FfdVc="
},
"keys": {}
}'
Verify a eddsa signature.
-
URL
/api/zenswarm-oracle-verify-eddsa
-
Method:
POST
-
Data Params
asset={data}
eddsa signature={eddsa signature of asset}
eddsa public key={eddsa public key}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": [
"The_EDDSA_signature_was_verified"
]
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-verify-eddsa]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-oracle-verify-eddsa' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data":{
"asset": {
"data": {
"houses": [
{
"name": "Harry",
"team": "Gryffindor"
},
{
"name": "Draco",
"team": "Slytherin"
}
],
"number": 42
}
},
"eddsa_public_key": "7XKv9Fc5d2HSrtkwMPcxeUnVQSB8sQMhtiexhfA77rm4",
"eddsa_signature": "39HdhA9B5GpsNRbt8ikyKRoBBZvP6XAeKaGPUEkAy7WGEgqLf3yAqGpeMXzvoMMtjEHmaQurJ18TVJbEgH8x5ZjE"
},
"keys": {}
}'
Verify a schnorr signature.
-
URL
/api/zenswarm-oracle-verify-schnorr
-
Method:
POST
-
Data Params
asset={data}
schnorr signature={schnorr signature of asset}
schnorr public key={schnorr public key}
-
Success Response:
- Code: 200
Content:
- Code: 200
{
"output": [
"The_Schnorr_signature_was_verified"
]
}
- Error Response:
Code: 200 Error: Internal Server Error
Content:
{
"zenroom_errors": {
"result": "",
"logs": " ***Zenroom ERROR logs*** "
},
"result": "",
"exception": "[ZENROOM EXECUTION ERROR FOR CONTRACT zenswarm-oracle-verify-schnorr]\n\n\n Please check zenroom_errors logs"
}
- Sample Call:
curl -X 'POST' \
'https://swarm2.dyne.org:20003/api/zenswarm-oracle-verify-schnorr' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"data":{
"asset": {
"data": {
"houses": [
{
"name": "Harry",
"team": "Gryffindor"
},
{
"name": "Draco",
"team": "Slytherin"
}
],
"number": 42
}
},
"schnorr_public_key": "BOqptDEFEumM+RMlEYD0rbHOrxvbPh5kEGBNNtw0qpBjRmWKvlDGl5GfrJsklqrb",
"schnorr_signature": "EnFxUGn7E1iLfXE++WRmFwPNNXnRQk6yUMGHtGNzxWUzxQxNCveVrRfyZ0DiidUFI3j//1UuzmxYaJla0DUWxQBh2jb11X1oYzNm92UTxuA="
},
"keys": {}
}'
The following APIs contain the business logic of the Oracles and are used only internally, therefore not documented:
/api/ethNotarization-0-newhead
/api/ethNotarization-1-newhead
/api/ethNotarization-2-filter-newhead
/api/ethNotarization-4-ethereum-store
/api/ethereum-to-planetmint-3
/api/ethereum-to-planetmint-4
/api/iota-notarization-to-eth-0
/api/iota-notarization-to-eth-2
/api/iota-to-planetmint-1
/api/sawroom-notarization-0
/api/sawroom-notarization-1
/api/sawroom-notarization-2
/api/sawroom-notarization-4
/api/sawroom-to-planetmint-3
/api/zenswarm-oracle-announce
/api/ethNotarization-3-ethereum-store
/api/iota-notarization-to-eth-1
/api/sawroom-notarization-3
/api/ethereum-to-ethereum-notarization.chain
/api/ethereum-to-planetmint-notarization.chain
/api/iota-to-ethereum-notarization.chain
/api/iota-to-planetmint-notarization.chain
/api/sawroom-to-ethereum-notarization.chain
/api/sawroom-to-planetmint-notarization.chain
/api/zenswarm-oracle-key-issuance.chain
/api/zenswarm-oracle-generate-all-public-keys
/api/zenswarm-oracle-key-issuance-1
/api/zenswarm-oracle-key-issuance-3
/api/zenswarm-oracle-update
/api/zenswarm-oracle-key-issuance-2
/api/zenswarm-oracle-execute-zencode-planetmint-1
/api/zenswarm-oracle-execute-zencode-planetmint-2
/api/zenswarm-dilithium-1-extract-a-random-did
/api/zenswarm-dilithium-2-resolve-did
/api/zenswarm-dilithium-3-retrieve-dilithium-pk-and-endpoints
/api/zenswarm-dilithium-4-dilithium-signature
/api/zenswarm-dilithium-5-verify-dilithium-signature-on-planetmint
/api/zenswarm-6-rand-oracles-1-extract-6-endpoints
/api/zenswarm-6-rand-oracles-2-parrallel-post
/api/zenswarm-write-on-ethereum-1
/api/zenswarm-write-on-ethereum-2
The instances now have update mechanism, triggered via an API (currently working only with 6 instances). The update flow to the instances is triggered by the API:
https://apiroom.net/api/dyneorg/consensusroom-update-all-instances
The API needs no parameter.
Zenswarm - {tagline}
Copyleft (ษ) 2021 Dyne.org foundation, Amsterdam
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.