Как inkoke другой метод контракта в пэре - PullRequest
0 голосов
/ 26 марта 2019

В Hyperledger Fabric я загрузил два контракта в одном и том же коде цепи (два контроллера).На одноранговом интерфейсе командной строки мне удалось вызвать только первый метод контракта, который я загрузил в своем коде.

"Вызов цепного кода Invoke () возвратил сообщение об ошибке [Ошибка: Вы попросили вызвать функцию, которая не существует:createPost]. Отправка сообщения об ошибке обратно равноправному узлу "

Мои index.ts (машинопись): экспорт контрактов const: любой [] = [stController, PostController];

2019-03-25T21:11:23.217Z INFO [contracts-spi/chaincodefromcontract.js] Metadata is : 
 { contracts: 
   { stController: 
      { name: 'stController',
        contractInstance: { name: 'stController', default: true },
        transactions: 
         [ { name: 'initLedger' },
           { name: 'queryStDoc' },
           { name: 'createStDoc' },
           { name: 'queryAllStDocs' },
           { name: 'queryStByOwner' },
           { name: 'changeStOwner' },
           { name: 'cancel' } ],
        info: { title: '', version: '' } },
     PostController: 
      { name: 'PostController',
        contractInstance: { name: 'PostController' },
        transactions: [ { name: 'createPost' }, { name: 'deletePost' } ],
        info: { title: '', version: '' } },
     'org.hyperledger.fabric': 
      { name: 'org.hyperledger.fabric',
        contractInstance: { name: 'org.hyperledger.fabric' },
        transactions: [ { name: 'GetMetadata' } ],
        info: { title: '', version: '' } } },
  info: { version: '1.0.0', title: 'sget' },
  components: { schemas: {} } } 

1 Ответ

0 голосов
/ 26 марта 2019

Я не сделал этого в Typescript, но я сделал то же самое в JavaScript - я использовал супертип в обоих контрактах, чтобы получить пространство имен, чтобы различать контракты.(В моем примере у меня были повторяющиеся имена функций - 2 копии Fabcar.)

    constructor() {
    super('org.example.car');
    }


    constructor() {
    super('org.example.rob');
    }

Затем я вызвал функции из cli следующим образом:

peer chaincode invoke -o orderer.example.com:7050 -C mychannel -c '{"Args":["org.example.car:queryCar","CAR2"]}' -n fcnstest

и

peer chaincode invoke -o orderer.example.com:7050 -C mychannel -c '{"Args":["org.example.rob:changeCarOwner","CAR2","Rob"]}' -n fcnstest

В учебном пособии Commercial Paper приведен пример использования пространства имен / супертипа.Но это также Javascript, а не машинопись.

...