0

私はチェーンコード開発ガイドに従っています: https://github.com/hyperledger/fabric/blob/07ea01124b2768ee04a6b30fe29a6395f6d3d819/docs/API/SandboxSetup.md

私のテスト結果では、本番環境 (開発環境ではなく、 --peer-chaincodedev ではありません) では、 deploy メソッドの作業負荷 (システムの実行時間やストレージ サイズなど) は、invoke メソッドよりもはるかに高くなります。

テスト結果が正しければ、デプロイ メソッドのコストは呼び出しメソッドよりもはるかに高いと思います。100万倍以上のコスト。

このようなコスト状況で、どのような設計をすればよいのでしょうか。どのくらいの頻度が適していますか。

たとえば、 deploy メソッドを呼び出さないようにするにはどうすればよいでしょうか? deploy メソッドを置き換えるには、invoke メソッドをどのように使用すればよいですか?

4

1 に答える 1

1
  1. 一度デプロイすると、プロセス名ではなく、チェーンコード名がより良いビジネス名になります。

func (t *Chaincode) Init(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
	var err error
	var Number string
	if len(args) != 1 {return nil, errors.New("sign Init Expecting 1 number of arguments.")}
	Number = args[0]
	err = stub.PutState(Number, []byte("01"))
	if err != nil {return nil, err}

	return nil, nil
}

  1. インボーク メソッドを使用して、新しいチェーンコードのデプロイ メソッドを回避します。

func (t *Chaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
	if function == "delete" {
		// Deletes an entity from its state
		return t.delete(stub, args)
	}
	
	if function == "newcontract" {
		// Deletes an entity from its state
		return t.delete(stub, args)
	}
	
	xxxxxxxxxxxxxxxxxxxx
	return nil, nil
}

func (t *SimpleChaincode) Query(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
	if function != "query" {
		return nil, errors.New("Invalid query function name. Expecting \"query\"")
	}
	
	xxxxxxxxxxxxxxxxxxxx
	return xxx, nil
}

// Deletes an entity from state

func (t *SimpleChaincode) delete(stub *shim.ChaincodeStub, args []string) ([]byte, error) {
	if len(args) != 1 {
		return nil, errors.New("Incorrect number of arguments. Expecting 1")
	}

	A := args[0]

	// Delete the key from the state in ledger
	err := stub.DelState(A)
	if err != nil {
		return nil, errors.New("Failed to delete state")
	}

	return nil, nil
}

于 2016-06-01T15:43:16.210 に答える