Hyperledger Fabric Java SDK: транзакция запроса работает, но создать транзакцию не удается из-за исключения недействителJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Hyperledger Fabric Java SDK: транзакция запроса работает, но создать транзакцию не удается из-за исключения недействител

Сообщение Anonymous »

Я работаю над приложением Hyperledger Fabric, используя Java SDK для взаимодействия со смарт-контрактом. Моя транзакция запроса работает отлично, но когда я пытаюсь выполнить транзакцию создания, она завершается с ошибкой «Исключение контракта». и сообщение «Недействительная транзакция».
Вот подробности:
Код смарт-контракта (Go):
У меня есть смарт-контракт, развернутый в моей сети Fabric. Функция CreateContract работает следующим образом:
Эта функция создает новый контракт с предоставленными параметрами или выдает ошибку, если контракт уже существует.
func (s *SmartContract) CreateContract(ctx contractapi.TransactionContextInterface, contractId string, client string, supplier string, description string) (string, error) {
if contractId == "" {
return "", fmt.Errorf("Contract Id cannot be empty.")
}
if client == "" {
return "", fmt.Errorf("Client field cannot be empty.")
}
if supplier == "" {
return "", fmt.Errorf("Supplier field cannot be empty.")
}

chatAsBytes, err := ctx.GetStub().GetState(contractId)
if err != nil {
return "", fmt.Errorf("Failed to read from world state. %s", err.Error())
}

if chatAsBytes == nil {
newContract := LegalContractSchema{
DocType: "Legal Contract",
Participants: []string{client, supplier},
Description: description,
}
newContractAsBytes, _ := json.Marshal(newContract)
err := ctx.GetStub().PutState(contractId, newContractAsBytes)

if err != nil {
return "", fmt.Errorf("Failed writing to world state. %s", err.Error())
}
return "Successfully created contract", nil
} else {
return "", fmt.Errorf("Failed to create contract schema, contract already exists.")
}
}

Код Java SDK:
Я использую Java SDK для взаимодействия со смарт-контрактом. Мой код для вызова функции CreateContract выглядит следующим образом:
Gateway.Builder builder = Gateway.createBuilder()
.identity(wallet, "admin")
.networkConfig(networkConfigFile)
.discovery(true)
.commitTimeout(60, TimeUnit.SECONDS);

try (Gateway gateway = builder.connect()) {
Network network = gateway.getNetwork("mychannel");
Contract contract = network.getContract("legalContract");

// Submit a create transaction
byte[] createResult = contract.createTransaction("CreateContract")
.submit("contractId123", "ClientName", "SupplierName", "This is a test description");

System.out.println("Create Transaction Result: " + new String(createResult, StandardCharsets.UTF_8));
}

Транзакция запроса:
Транзакция запроса (GetLegalContractCert) отлично работает с использованием той же структуры кода Java:
byte[] queryResult = contract.evaluateTransaction("GetLegalContractCert", "contractId123");
System.out.println("Query Result: " + new String(queryResult, StandardCharsets.UTF_8));

Проблема:
Когда я вызываю функцию CreateContract, я получаю следующую ошибку:
Invalid transaction Contract Exception
Транзакция запроса работает нормально, но транзакция создания завершается с ошибкой.
Что я пробовал:
  • Проверены входные аргументы: проверено, что значения контракта, клиента, поставщика и описания передаются в виде строк в кодировке UTF-8.
  • Проверено Политика одобрения: проверено, что политика одобрения соответствует одноранговые узлы, используемые в транзакции.
  • Отладка смарт-контракта: добавлена ​​регистрация в функцию CreateContract, но не обнаружено никаких запусков журналов, что позволяет предположить, что транзакция не достигает смарт-контракта.< /li>
    Увеличенное время ожидания: установите более длительное время ожидания для фиксации и доставки.
Среда:
  • Hyperledger Fabric: v2.4
  • Java SDK: v2.4
  • Go Smart Contract: API контракта Fabric
  • Сеть: одноканальная (mychannel) с двумя организациями и двумя одноранговыми узлами.
Мой профиль подключения выглядит следующим образом:< /p>
{
"name": "test-network-org1",
"version": "1.0.0",
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
}
}
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com"
],
"certificateAuthorities": [
"ca.org1.example.com"
]
}
},
"peers": {
"peer0.org1.example.com": {
"url": "grpcs://localhost:7051",
"tlsCACerts": {
"pem": "-----BEGIN CERTIFICATE-----\XYF\n-----END CERTIFICATE-----\n"
},
"grpcOptions": {
"ssl-target-name-override": "peer0.org1.example.com",
"hostnameOverride": "peer0.org1.example.com"
}
}
},
"certificateAuthorities": {
"ca.org1.example.com": {
"url": "https://localhost:7054",
"caName": "ca-org1",
"tlsCACerts": {
"pem": ["-----BEGIN CERTIFICATE-----\XYZ\n-----END CERTIFICATE-----\n"]
},
"httpOptions": {
"verify": false
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... action-fai
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»