Market messages

Market messages is used for exchange Demand and Offer information. It also used for delivery Result messages with liability execution reports.

This is spec for Robonomics Generation 5.

  • Currently for message delivery is used IPFS PubSub broadcaster.
  • IPFS PubSub topic is set according to Lighthouse ENS name.

Messages content

Robonomics market message use JSON data format.

Demand

FieldROS TypeDescription
modelipfs_common/MultihashCPS behavioral model identifier
objectiveipfs_common/MultihashCPS behavioral model parameters in rosbag file
tokenethereum_common/AddressOperational token address
costethereum_common/UInt256CPS behavioral model execution cost
lighthouseethereum_common/AddressLighthouse contract address
validatorethereum_common/AddressObserving network address
validatorFeeethereum_common/UInt256Observing network fee
deadlineethereum_common/UInt256Deadline block number
nonceethereum_common/UInt256Robonomics message counter
senderethereum_common/AddressMessage sender address
signaturestd_msgs/UInt8[]Sender’s Ethereum signature

Offer

FieldROS TypeDescription
modelipfs_commom/MultihashCPS behavioral model identifier
objectiveipfs_commom/MultihashCPS behavioral model parameters in rosbag file
tokenethereum_commom/AddressOperational token address
costethereum_commom/UInt256CPS behavioral model execution cost
validatorethereum_commom/AddressObserving network address
lighthouseethereum_commom/AddressLighthouse contract address
lighthouseFeeethereum_commom/UInt256Liability creation fee
deadlineethereum_commom/UInt256Deadline block number
nonceethereum_commom/UInt256Robonomics message counter
senderethereum_commom/AddressMessage sender address
signaturestd_msgs/UInt8[]Sender’s Ethereum signature

Result

FieldROS TypeDescription
liabilityethereum_commom/AddressLiability contract address
resultipfs_commom/MultihashLiability result multihash
successstd_msgs/BoolIs liability executed successful
signaturestd_msgs/UInt8[]Sender’s Ethereum signature

Messages signing

Before signing the messages is packed using abi.encodePacked solidity finction and hashed by Keccak_256.

   demandHash = keccak256(abi.encodePacked(
        _model
      , _objective
      , _token
      , _cost
      , _lighthouse
      , _validator
      , _validator_fee
      , _deadline
      , IFactory(factory).nonceOf(_sender)
      , _sender
      ));

nonce parameter is counted by factory smart contract and incremented for each created liability smart contract.

Message hash are signed using Ethereum secp256k1signature.