поведение цепного кода во время выполнения - PullRequest
0 голосов
/ 13 февраля 2020

В настоящее время изучаем немного о разработке цепочек кодов с использованием GO (недавно работал с ethereum). У меня есть следующий код:

type Person struct {
    name string // assume json fields for marshaling etc.
    lastname string // ...
    SSN string //  ...
}

func (p *Person) Init(stub shim.ChaincodeStubInterface) Response {
    args := stub.GetArgs()
    var person Person
    // just assume that args[0] is a json
    json.Unmarshal(args[0], person )
    p.name = person.name
    p.lastname = person.lastname
    p.SSN = person.SSN

}
 ......

Во время функции инициализации я передаю человеку на инициализацию кода цепи. Тогда у меня вопрос: после очередного звонка против цепного кода. Будет ли экземпляр p по-прежнему сохраняться в функции init, чтобы я мог прочитать p.name, данное во время инициализации? Как цепной код управляет этим?

1 Ответ

1 голос
/ 13 февраля 2020

Вы можете обнаружить, что оно сохраняется, если вы попробуете его, но оно будет сохранено только в памяти. Если цепной код перезапускается, или если перезапускает узел, то данные будут потеряны. Так что это не рекомендуемый подход.

Цепной код имеет доступ к различным хранилищам - состоянию мира (аналогично состоянию мира в Ethereum) и коллекциям личных данных. Данные, хранящиеся в состоянии мира, используются всеми участниками канала.

Вы можете перевести данные в состояние мира с помощью stub.PutState(key, value) и получить данные из состояния мира с помощью stub.GetState(key). Ваша функция Init должна хранить данные в состоянии мира, а затем ваша функция Invoke может выводить данные из состояния мира при обработке любых транзакций.

Я рекомендую вам ознакомиться с примером FabCar если вы еще этого не сделали: https://github.com/hyperledger/fabric-samples/blob/release-1.4/chaincode/fabcar/go/fabcar.go

Транзакция initLedger добавляет 10 автомобилей в мировое государство. Транзакция queryCar считывает автомобиль из мирового государства. Существуют и другие транзакции для запроса всех автомобилей или обновления владельца автомобиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...