Skip to content

0x0d01/smart-contract

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NDID Smart Contract

tendermint ABCI app

Note

Test this app with command below

TENDERMINT_ADDRESS=http:https://localhost:45000 go test -v

Add new validator (For testing)

get PubKey from pub_key.data in priv_validator.json

curl -s 'localhost:45000/broadcast_tx_commit?tx="val:PubKey"'

Prerequisites

Setup

  1. Get dependency (tendermint ABCI)

    cd $GOPATH/src/github.com/ndidplatform/smart-contract/abci
    dep ensure
  2. Create a directory for the project

    mkdir -p $GOPATH/src/github.com/ndidplatform/smart-contract
  3. Clone the project

    git clone https://github.com/ndidplatform/smart-contract.git $GOPATH/src/github.com/ndidplatform/smart-contract

Run IdP node

  1. Run ABCI server

    cd $GOPATH/src/github.com/ndidplatform/smart-contract
    
    DB_NAME=IdP_DB go run abci/server.go tcp:https://127.0.0.1:46000
  2. Run tendermint

    cd $GOPATH/src/github.com/ndidplatform/smart-contract
    
    tendermint --home ./config/tendermint/IdP unsafe_reset_all && tendermint --home ./config/tendermint/IdP node --consensus.create_empty_blocks=false

Run RP node

  1. Run ABCI server

    cd $GOPATH/src/github.com/ndidplatform/smart-contract
    
    DB_NAME=RP_DB go run abci/server.go tcp:https://127.0.0.1:46001
  2. Run tendermint

    cd $GOPATH/src/github.com/ndidplatform/smart-contract
    
    tendermint --home ./config/tendermint/RP unsafe_reset_all && tendermint --home ./config/tendermint/RP node --consensus.create_empty_blocks=false

Run AS node

  1. Run ABCI server

    cd $GOPATH/src/github.com/ndidplatform/smart-contract
    
    DB_NAME=AS_DB go run abci/server.go tcp:https://127.0.0.1:46001
  2. Run tendermint

    cd $GOPATH/src/github.com/ndidplatform/smart-contract
    
    tendermint --home ./config/tendermint/AS unsafe_reset_all && tendermint --home ./config/tendermint/AS node --consensus.create_empty_blocks=false

Run in Docker

Required

Build

docker-compose -f docker/docker-compose.build.yml build

Run

docker-compose -f docker/docker-compose.yml up

IMPORTANT NOTE

  1. You must start IDP, RP and AS nodes in order to run the platform.

  2. After starting BOTH nodes, please wait for

    Commit
    Commit
    

    to show in the first terminal (go run abci ...) of both processes before starting api processes.

  3. When IDP node and RP node run on separate machines, please edit seeds in config/tendermint/{RP or IdP}/config/config.toml to match address of another machines.

Technical details to connect with api

Interact with api in BASE64 format data.

Broadcast tx format

functionName|parameter|nonce|base64(sign(param+nonce))|nodeID

Query format

functionName|parameter

Create transaction function

InitNDID

Parameter

{
  "node_id": "NDID",
  "public_key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEA30i6deo6vqxPdoxA9pUpuBag/cVwEVWO8dds5QDfu/z957zxXUCY\nRxaiRWGAbOta4K5/7cxlsqI8fCvoSyAa/B7GTSc3vivK/GWUFP+sQ/Mj6C/fgw5p\nxK/+olBzfzLMDEOwFRbnYtPtbWozfvceq77fEReTUdBGRLak7twxLrRPNzIu/Gqv\nn5AR8urXyF4r143CgReGkXTTmOvHpHu98kCQSINFuwBB98RLFuWdVwkrHyzaGnym\nQu+0OR1Z+1MDIQ9WlViD1iaJhYKA6a0G0O4Nns6ISPYSh7W7fI31gWTgHUZN5iTk\nLb9t27DpW9G+DXryq+Pnl5c+z7es/7T34QIDAQAB\n-----END RSA PUBLIC KEY-----\n"
}

Expected Output

log: "success"

RegisterNode

Parameter

Posible role is RP,IdP and AS

{
  "node_id": "IdP1",
  "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwx9oT44DmDRiQJ1K0b9Q\nolEsrQ51hBUDq3oCKTffBikYenSUQNimVCsVBfNpKhZqpW56hH0mtgLbI7QgZGj9\ncNBMzSLMolltw0EerF0Ckz0Svvie1/oFJ1a0Cf4bdKKW6wRzL+aFVvelmNlLoSZX\noCpxUPQq7SMLoYEK1c+e3l3H0bfh6TAVt7APOQEFhXy9MRt83oVSAGW36gdNEksm\nz1WIT/C1XcHHVwCIJGSdZw5F6Y2gBjtiLsiFtpKfxQAPwBvDi7uS0PUdN7YQ/G69\nb0FgoE6qivDTqYfr80Y345Qe/qPGDvfne7oA8DIbRV+Kd5s4tFn/cC0Wd+jvrZJ7\njwIDAQAB\n-----END PUBLIC KEY-----\n",
  "master_public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArdcKj/gAetVyg6Nn2lDi\nm/UJYQsQCav60EVbECm5EVT8WgnpzO+GrRyBtxqWUdtGar7d6orLh1RX1ikU7Yx2\nSA8Xlf+ZDaCELba/85Nb+IppLBdPywixgumoto9G9dDGSnPkHAlq5lXXA1eeUS7j\niU1lf37lwTZaO0COAuu8Vt9GcwYPh7SSf4/eXabQGbo/TMUVpXX1w5N1A07Qh5DG\nr/ZKzEE9/5bJJJRS635OA2T4gIY9XRWYiTxtiZz6AFCxP92Cjz/sNvSc/Cuvwi15\nycS4C35tjM8iT5djsRcR+MJeXyvurkaYgMGJTDIWub/A5oavVD3VwusZZNZvpDpD\nPwIDAQAB\n-----END PUBLIC KEY-----\n",
  "node_name": "IdP Number 1 from ...",
  "role": "IdP",
  "max_ial": 3,
  "max_aal": 3
}

Expected Output

log: "success"

RegisterMsqDestination

Parameter

{
  "users": [
    {
      "hash_id": "���\u0010fV+�{��DD�F�;Hָ�`��椼q\u0017���",
      "ial": 3
    }
  ],
  "node_id": "IdP1"
}

Expected Output

log: "success"

AddAccessorMethod

Parameter

{
  "accessor_id": "TestAccessorID",
  "accessor_type": "TestAccessorType",
  "accessor_key": "TestAccessorKey",
  "commitment": "TestCommitment"
}

Expected Output

log: "success"

RegisterServiceDestination

Parameter

{
  "service_id": "statement",
  "node_id": "AS1",
  "service_name": "Bank statement",
  "min_ial": 1.1,
  "min_aal": 1.2
}

Expected Output

log: "success"

RegisterMsqAddress

Parameter

{
  "node_id": "IdP1",
  "ip": "192.168.3.99",
  "port": 8000
}

Expected Output

log: "success"

CreateRequest

Parameter

{
  "request_id": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6",
  "min_idp": 1,
  "min_aal": 1,
  "min_ial": 1,
  "timeout": 259200,
  "data_request_list": null,
  "message_hash": "hash('Please allow...')"
}

Expected Output

log: "success"

CreateIdpResponse

Parameter

{
  "request_id": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6",
  "aal": 3,
  "ial": 3,
  "status": "accept",
  "signature": "signature",
  "accessor_id": "TestAccessorID",
  "identity_proof": "Magic"
}

Expected Output

log: "success"

SignData

Parameter

{
  "node_id": "AS1",
  "request_id": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6",
  "signature": "sign(data,asKey)"
}

Expected Output

log: "success"

SetNodeToken

Parameter

{
  "node_id": "RP1",
  "amount": 100
}

Expected Output

log: "success"

AddNodeToken

Parameter

{
  "node_id": "RP1",
  "amount": 111.11
}

Expected Output

log: "success"

ReduceNodeToken

Parameter

{
  "node_id": "RP1",
  "amount": 61.11
}

Expected Output

log: "success"

SetPriceFunc

Parameter

{
  "func": "CreateRequest",
  "price": 99.99
}

Expected Output

log: "success"

CloseRequest

Parameter

{
  "requestId": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6"
}

Expected Output

log: "success"

TimeOutRequest

Parameter

{
  "requestId": "ef6f4c9c-818b-42b8-8904-3d97c4c11111"
}

Expected Output

log: "success"

AddNamespace

Parameter

{
  "namespace": "CID",
  "description": "Citizen ID"
}

Expected Output

log: "success"

DeleteNamespace

Parameter

{
  "namespace": "Tel"
}

Expected Output

log: "success"

UpdateNode

Parameter

{
  "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArdcKj/gAetVyg6Nn2lDi\nm/UJYQsQCav60EVbECm5EVT8WgnpzO+GrRyBtxqWUdtGar7d6orLh1RX1ikU7Yx2\nSA8Xlf+ZDaCELba/85Nb+IppLBdPywixgumoto9G9dDGSnPkHAlq5lXXA1eeUS7j\niU1lf37lwTZaO0COAuu8Vt9GcwYPh7SSf4/eXabQGbo/TMUVpXX1w5N1A07Qh5DG\nr/ZKzEE9/5bJJJRS635OA2T4gIY9XRWYiTxtiZz6AFCxP92Cjz/sNvSc/Cuvwi15\nycS4C35tjM8iT5djsRcR+MJeXyvurkaYgMGJTDIWub/A5oavVD3VwusZZNZvpDpD\nPwIDAQAB\n-----END PUBLIC KEY-----\n",
  "master_public_key": ""
}

Expected Output

log: "success"

UpdateValidator

Parameter

{
  "public_key": "5/6rEo7aQYq31J32higcxi3i8xp9MG/r5Ho5NemwZ+g=",
  "power": 0
}

Expected Output

log: "success"

Query function

GetNodePublicKey

Parameter

{
  "node_id": "RP1"
}

Expected Output

{
  "public_key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAwCB4UBzQcnd6GAzPgbt9j2idW23qKZrsvldPNifmOPLfLlMusv4E\ncyJf4L42/aQbTn1rVSu1blGkuCK+oRlKWmZEWh3xv9qrwCwov9Jme/KOE98zOMB1\n0/xwnYotPadV0de80wGvKT7OlBlGulQRRhhgENNCPSxdUlozrPhrzGstXDr9zTYQ\noR3UD/7Ntmew3mnXvKj/8+U48hw913Xn6btBP3Uqg2OurXDGdrWciWgIMDEGyk65\nNOc8FOGa4AjYXzyi9TqOIfmysWhzKzU+fLysZQo10DfznnQN3w9+pI+20j2zB6gg\npL75RjZKYgHU49pbvjF/eOSTOg9o5HwX0wIDAQAB\n-----END RSA PUBLIC KEY-----\n"
}

GetMsqDestination

Parameter

{
  "hash_id": "���\u0010fV+�{��DD�F�;Hָ�`��椼q\u0017���",
  "min_ial": 3,
  "min_aal": 3,
}

Expected Output

{
  "node": [
    {
      "id": "IdP1",
      "name": "IdP Number 1 from ..."
    },
    {
      "id": "IdP2",
      "name": ""
    }
  ]
}

GetAccessorMethod

Parameter

{
  "accessor_id": "TestAccessorID"
}

Expected Output

{
  "accessor_type": "TestAccessorType",
  "accessor_key": "TestAccessorKey",
  "commitment": "TestCommitment"
}

GetServiceDestination

Parameter

{
  "service_id": "statement"
}

Expected Output

{
  "node_id": [
    "AS1"
  ]
}

GetMsqAddress

Parameter

{
  "node_id": "IdP1"
}

Expected Output

{
  "ip": "192.168.3.99",
  "port": 8000
}

GetRequest

Parameter

{
  "requestId": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6"
}

Expected Output

{
  "status": "pending",
  "is_closed": false,
  "is_timed_out": true,
  "messageHash": "hash('Please allow...')"
}

GetRequestDetail

Parameter

{
  "requestId": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6"
}

Expected Output

{
  "request_id": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6",
  "min_idp": 1,
  "min_aal": 1,
  "min_ial": 1,
  "timeout": 259200,
  "data_request_list": null,
  "message_hash": "hash('Please allow...')",
  "responses": [
    {
      "request_id": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6",
      "aal": 3,
      "ial": 3,
      "status": "accept",
      "signature": "signature",
      "accessor_id": "TestAccessorID",
      "identity_proof": "Magic"
    }
  ]
}

GetNodeToken

Parameter

{
  "node_id": "RP1"
}

Expected Output

{
  "amount": 100
}

GetPriceFunc

Parameter

{
  "func": "CreateRequest"
}

Expected Output

{
  "price": 99.99
}

GetUsedTokenReport

Parameter

{
  "node_id": "AS1"
}

Expected Output

[
  {
    "method": "RegisterServiceDestination",
    "price": 1,
    "data": ""
  },
  {
    "method": "SignData",
    "price": 1,
    "data": "ef6f4c9c-818b-42b8-8904-3d97c4c520f6"
  }
]

GetServiceDetail

Parameter

{
  "service_id": "statement",
  "node_id": "AS1"
}

Expected Output

{
  "service_name": "Bank statement",
  "min_ial": 1.1,
  "min_aal": 1.2
}

GetNamespaceList

Parameter

Expected Output

[
  {
    "namespace": "CID",
    "description": "Citizen ID"
  }
]

About

NDID tendermint ABCI app

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 98.3%
  • Shell 1.7%