|
@@ -45,12 +45,15 @@ Const
|
|
CT_RPC_ErrNum_InvalidOperation = 1004;
|
|
CT_RPC_ErrNum_InvalidOperation = 1004;
|
|
CT_RPC_ErrNum_InvalidPubKey = 1005;
|
|
CT_RPC_ErrNum_InvalidPubKey = 1005;
|
|
CT_RPC_ErrNum_InvalidAccountName = 1006;
|
|
CT_RPC_ErrNum_InvalidAccountName = 1006;
|
|
|
|
+ CT_RPC_ErrNum_InvalidEPASA = 1007;
|
|
CT_RPC_ErrNum_NotFound = 1010;
|
|
CT_RPC_ErrNum_NotFound = 1010;
|
|
CT_RPC_ErrNum_WalletPasswordProtected = 1015;
|
|
CT_RPC_ErrNum_WalletPasswordProtected = 1015;
|
|
CT_RPC_ErrNum_InvalidData = 1016;
|
|
CT_RPC_ErrNum_InvalidData = 1016;
|
|
|
|
+ CT_RPC_ErrNum_AmbiguousPayload = 1017;
|
|
CT_RPC_ErrNum_InvalidSignature = 1020;
|
|
CT_RPC_ErrNum_InvalidSignature = 1020;
|
|
CT_RPC_ErrNum_NotAllowedCall = 1021;
|
|
CT_RPC_ErrNum_NotAllowedCall = 1021;
|
|
|
|
|
|
|
|
+
|
|
Type
|
|
Type
|
|
|
|
|
|
{ TRPCServer }
|
|
{ TRPCServer }
|
|
@@ -60,6 +63,7 @@ Type
|
|
TPascalCoinJSONComp = Class
|
|
TPascalCoinJSONComp = Class
|
|
private
|
|
private
|
|
class function OperationsHashTreeToHexaString(Const OperationsHashTree : TOperationsHashTree) : String;
|
|
class function OperationsHashTreeToHexaString(Const OperationsHashTree : TOperationsHashTree) : String;
|
|
|
|
+ class function TryResolveOfflineEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AErrorMessage: String): Boolean;
|
|
public
|
|
public
|
|
class procedure FillAccountObject(Const account : TAccount; jsonObj : TPCJSONObject);
|
|
class procedure FillAccountObject(Const account : TAccount; jsonObj : TPCJSONObject);
|
|
class procedure FillBlockObject(nBlock : Cardinal; ANode : TNode; jsonObject: TPCJSONObject);
|
|
class procedure FillBlockObject(nBlock : Cardinal; ANode : TNode; jsonObject: TPCJSONObject);
|
|
@@ -71,9 +75,11 @@ Type
|
|
//
|
|
//
|
|
class Function HexaStringToOperationsHashTree(Const AHexaStringOperationsHashTree : String; ACurrentProtocol : Word; out AOperationsHashTree : TOperationsHashTree; var AErrors : String) : Boolean;
|
|
class Function HexaStringToOperationsHashTree(Const AHexaStringOperationsHashTree : String; ACurrentProtocol : Word; out AOperationsHashTree : TOperationsHashTree; var AErrors : String) : Boolean;
|
|
class Function CapturePubKey(const AInputParams : TPCJSONObject; const APrefix : String; var APubKey : TAccountKey; var AErrortxt : String) : Boolean;
|
|
class Function CapturePubKey(const AInputParams : TPCJSONObject; const APrefix : String; var APubKey : TAccountKey; var AErrortxt : String) : Boolean;
|
|
- class function CheckAndGetEncodedRAWPayload(Const ARawPayload : TRawBytes; Const APayload_method, AEncodePwdForAES : String; const ASenderAccounKey, ATargetAccountKey : TAccountKey; out AOperationPayload : TOperationPayload; Var AErrorNum : Integer; Var AErrorDesc : String) : Boolean;
|
|
|
|
- class Function CaptureAccountNumber(const AInputParams : TPCJSONObject; const AParamName : String; const ABank : TPCBank; out AResolvedAccount: Cardinal; var AErrorParam : String) : Boolean;
|
|
|
|
- class Function CaptureEPASA(const AInputParams : TPCJSONObject; const AParamName : String; const ABank : TPCBank; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : Boolean; var AErrorParam : String) : Boolean;
|
|
|
|
|
|
+ class function CheckAndGetEncodedRAWPayload(Const ARawPayload : TRawBytes; const APayloadType : TPayloadType; Const APayload_method, AEncodePwdForAES : String; const ASenderAccounKey, ATargetAccountKey : TAccountKey; out AOperationPayload : TOperationPayload; Var AErrorNum : Integer; Var AErrorDesc : String) : Boolean;
|
|
|
|
+ class Function CaptureNOperation(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out ALastNOp: Cardinal; var AErrorParam : String) : Boolean;
|
|
|
|
+ class Function CaptureAccountNumber(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AResolvedAccount: Cardinal; var AErrorParam : String) : Boolean;
|
|
|
|
+ class Function CaptureEPASA(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : Boolean; var AErrorParam : String) : Boolean;
|
|
|
|
+ class Function OverridePayloadParams(const AInputParams : TPCJSONObject; const AEPASA : TEPasa) : Boolean;
|
|
end;
|
|
end;
|
|
|
|
|
|
TRPCServerThread = Class;
|
|
TRPCServerThread = Class;
|
|
@@ -349,7 +355,19 @@ Begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-class Function TPascalCoinJSONComp.CaptureAccountNumber(const AInputParams : TPCJSONObject; const AParamName : String; const ABank : TPCBank; out AResolvedAccount: Cardinal; var AErrorParam : String) : Boolean;
|
|
|
|
|
|
+class Function TPascalCoinJSONComp.CaptureNOperation(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out ALastNOp: Cardinal; var AErrorParam : String) : Boolean;
|
|
|
|
+var
|
|
|
|
+ LParamValue : String;
|
|
|
|
+begin
|
|
|
|
+ if NOT AInputParams.HasName(AParamName) then begin
|
|
|
|
+ AErrorParam := Format('Missing n-operation value for Param "%s"',[AParamName]);
|
|
|
|
+ Exit(False);
|
|
|
|
+ end;
|
|
|
|
+ // TODO: add type checking?
|
|
|
|
+ ALastNOp := AInputParams.AsCardinal(AParamName,0);
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+class Function TPascalCoinJSONComp.CaptureAccountNumber(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AResolvedAccount: Cardinal; var AErrorParam : String) : Boolean;
|
|
var
|
|
var
|
|
LEPasa : TEPasa;
|
|
LEPasa : TEPasa;
|
|
LKey : TAccountKey;
|
|
LKey : TAccountKey;
|
|
@@ -357,17 +375,17 @@ var
|
|
LParamValue : String;
|
|
LParamValue : String;
|
|
begin
|
|
begin
|
|
LParamValue := AInputParams.AsString(AParamName,'');
|
|
LParamValue := AInputParams.AsString(AParamName,'');
|
|
- Result := CaptureEPASA(AInputParams, AParamName, ABank, LEPasa, AResolvedAccount, LKey, LPurchase, AErrorParam);
|
|
|
|
|
|
+ Result := CaptureEPASA(AInputParams, AParamName, ANode, LEPasa, AResolvedAccount, LKey, LPurchase, AErrorParam);
|
|
if Result AND (NOT LEPasa.IsStandard) then begin
|
|
if Result AND (NOT LEPasa.IsStandard) then begin
|
|
AErrorParam := Format('"%s" is not valid Account Number for Param "%s"',[LParamValue,AParamName]);
|
|
AErrorParam := Format('"%s" is not valid Account Number for Param "%s"',[LParamValue,AParamName]);
|
|
Exit(False);
|
|
Exit(False);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-class function TPascalCoinJSONComp.CaptureEPASA(const AInputParams : TPCJSONObject; const AParamName : String; const ABank : TPCBank; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : Boolean; var AErrorParam : String): Boolean;
|
|
|
|
|
|
+class function TPascalCoinJSONComp.CaptureEPASA(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : Boolean; var AErrorParam : String): Boolean;
|
|
var LParamValue : String;
|
|
var LParamValue : String;
|
|
Begin
|
|
Begin
|
|
- if not Assigned(ABank) then raise EArgumentNilException.Create('ABank');
|
|
|
|
|
|
+
|
|
LParamValue := AInputParams.AsString(AParamName,'');
|
|
LParamValue := AInputParams.AsString(AParamName,'');
|
|
if Length(LParamValue)>0 then begin
|
|
if Length(LParamValue)>0 then begin
|
|
if Not TEPasa.TryParse(LParamValue, AEPasa) then begin
|
|
if Not TEPasa.TryParse(LParamValue, AEPasa) then begin
|
|
@@ -377,7 +395,14 @@ Begin
|
|
AErrorParam := Format('"%s" is not valid Account EPASA for Param "%s"',[LParamValue,AParamName]);
|
|
AErrorParam := Format('"%s" is not valid Account EPASA for Param "%s"',[LParamValue,AParamName]);
|
|
Exit(False);
|
|
Exit(False);
|
|
end;
|
|
end;
|
|
- Result := ABank.SafeBox.TryResolveAccountByEPASA(AEPasa, AResolvedAccount, AResolvedKey, ARequiresPurchase, AErrorParam);
|
|
|
|
|
|
+ if Assigned(ANode) then begin
|
|
|
|
+ Result := ANode.TryResolveEPASA(AEPasa, AResolvedAccount, AResolvedKey, ARequiresPurchase, AErrorParam);
|
|
|
|
+ end else begin
|
|
|
|
+ // Offline EPASA
|
|
|
|
+ Result := TryResolveOfflineEPASA(AEPasa, AResolvedAccount, AErrorParam);
|
|
|
|
+ AResolvedKey := CT_Account_NUL.accountInfo.accountKey;
|
|
|
|
+ ARequiresPurchase := False;
|
|
|
|
+ end;
|
|
end else begin
|
|
end else begin
|
|
AEPasa := TEPasa.Empty;
|
|
AEPasa := TEPasa.Empty;
|
|
AResolvedAccount := CT_AccountNo_NUL;
|
|
AResolvedAccount := CT_AccountNo_NUL;
|
|
@@ -387,6 +412,28 @@ Begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+class function TPascalCoinJSONComp.OverridePayloadParams(const AInputParams : TPCJSONObject; const AEPASA : TEPasa) : Boolean;
|
|
|
|
+begin
|
|
|
|
+ // none, dest, sender, aes, payload, pwd
|
|
|
|
+ if (NOT AEPASA.IsStandard) AND (AInputParams.HasValue('payload') OR AInputParams.HasValue('payload_method') OR AInputParams.HasValue('pwd')) then
|
|
|
|
+ Exit(False);
|
|
|
|
+
|
|
|
|
+ if AEPASA.PayloadType.HasTrait(ptPublic) then begin
|
|
|
|
+ AInputParams.SetAs('payload_method', TPCJSONVariantValue.CreateFromVariant('none'));
|
|
|
|
+ AInputParams.SetAs('payload', TPCJSONVariantValue.CreateFromVariant(AEPASA.GetRawPayloadBytes().ToHexaString()));
|
|
|
|
+ end else if AEPASA.PayloadType.HasTrait(ptSenderKeyEncrypted) then begin
|
|
|
|
+ AInputParams.SetAs('payload_method', TPCJSONVariantValue.CreateFromVariant('sender'));
|
|
|
|
+ AInputParams.SetAs('payload', TPCJSONVariantValue.CreateFromVariant(AEPASA.GetRawPayloadBytes().ToHexaString()));
|
|
|
|
+ end else if AEPASA.PayloadType.HasTrait(ptRecipientKeyEncrypted) then begin
|
|
|
|
+ AInputParams.SetAs('payload_method', TPCJSONVariantValue.CreateFromVariant('dest'));
|
|
|
|
+ AInputParams.SetAs('payload', TPCJSONVariantValue.CreateFromVariant(AEPASA.GetRawPayloadBytes().ToHexaString()));
|
|
|
|
+ end else if AEPASA.PayloadType.HasTrait(ptPasswordEncrypted) then begin
|
|
|
|
+ AInputParams.SetAs('payload_method', TPCJSONVariantValue.CreateFromVariant('aes'));
|
|
|
|
+ AInputParams.SetAs('payload', TPCJSONVariantValue.CreateFromVariant(AEPASA.GetRawPayloadBytes().ToHexaString()));
|
|
|
|
+ AInputParams.SetAs('pwd', TPCJSONVariantValue.CreateFromVariant(AEPASA.Password));
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
class function TPascalCoinJSONComp.CapturePubKey(
|
|
class function TPascalCoinJSONComp.CapturePubKey(
|
|
const AInputParams: TPCJSONObject; const APrefix: String;
|
|
const AInputParams: TPCJSONObject; const APrefix: String;
|
|
var APubKey: TAccountKey; var AErrortxt: String): Boolean;
|
|
var APubKey: TAccountKey; var AErrortxt: String): Boolean;
|
|
@@ -424,7 +471,7 @@ end;
|
|
|
|
|
|
class function TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(
|
|
class function TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(
|
|
const ARawPayload: TRawBytes;
|
|
const ARawPayload: TRawBytes;
|
|
-// const APayloadType : TPayloadType;
|
|
|
|
|
|
+ const APayloadType : TPayloadType;
|
|
const APayload_method, AEncodePwdForAES: String;
|
|
const APayload_method, AEncodePwdForAES: String;
|
|
const ASenderAccounKey, ATargetAccountKey: TAccountKey;
|
|
const ASenderAccounKey, ATargetAccountKey: TAccountKey;
|
|
out AOperationPayload : TOperationPayload;
|
|
out AOperationPayload : TOperationPayload;
|
|
@@ -432,11 +479,7 @@ class function TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(
|
|
var AErrorDesc: String): Boolean;
|
|
var AErrorDesc: String): Boolean;
|
|
begin
|
|
begin
|
|
AOperationPayload := CT_TOperationPayload_NUL;
|
|
AOperationPayload := CT_TOperationPayload_NUL;
|
|
- // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
|
|
- // TODO:
|
|
|
|
- // Needs to assign AOperationPayload.payload_type based on PIP-0027
|
|
|
|
- // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
|
|
- //AOperationPayload.payload_type := APayloadType.ProtocolValue;
|
|
|
|
|
|
+ AOperationPayload.payload_type := APayloadType.ProtocolValue;
|
|
if (Length(ARawPayload)>0) then begin
|
|
if (Length(ARawPayload)>0) then begin
|
|
if (APayload_method='none') then begin
|
|
if (APayload_method='none') then begin
|
|
AOperationPayload.payload_raw:=ARawPayload;
|
|
AOperationPayload.payload_raw:=ARawPayload;
|
|
@@ -643,6 +686,27 @@ Begin
|
|
End;
|
|
End;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+
|
|
|
|
+class function TPascalCoinJSONComp.TryResolveOfflineEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AErrorMessage: String): Boolean;
|
|
|
|
+begin
|
|
|
|
+ if (AEPasa.IsPayToKey) then begin
|
|
|
|
+ // PayToKey not supported in offline signing
|
|
|
|
+ AResolvedAccount := CT_AccountNo_NUL;
|
|
|
|
+ AErrorMessage := 'PayToKey not supported in offline signing';
|
|
|
|
+ Exit(False);
|
|
|
|
+ end else if (AEPasa.IsAddressedByName) then begin
|
|
|
|
+ // PayToKey not supported in offline signing
|
|
|
|
+ AResolvedAccount := CT_AccountNo_NUL;
|
|
|
|
+ AErrorMessage := 'Addressed-by-name EPASA not supported in offline signing';
|
|
|
|
+ Exit(False);
|
|
|
|
+ end;
|
|
|
|
+ // addressed by number
|
|
|
|
+ if NOT AEPasa.IsAddressedByNumber then raise Exception.Create('Internal Error 0293f104-fce6-46a5-853f-e91fb501b452');
|
|
|
|
+ if NOT AEPasa.Account.HasValue then raise Exception.Create('Internal Error b569cd90-8dd7-4fac-95c4-6508179dac03');
|
|
|
|
+ AResolvedAccount := AEPasa.Account.Value;
|
|
|
|
+ Result := true;
|
|
|
|
+end;
|
|
|
|
+
|
|
class function TPascalCoinJSONComp.ToPascalCoins(jsonCurr: Real): Int64;
|
|
class function TPascalCoinJSONComp.ToPascalCoins(jsonCurr: Real): Int64;
|
|
begin
|
|
begin
|
|
Result := Round(jsonCurr * 10000);
|
|
Result := Round(jsonCurr * 10000);
|
|
@@ -1208,7 +1272,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject;
|
|
Begin
|
|
Begin
|
|
Result := Nil;
|
|
Result := Nil;
|
|
if Not RPCServer.CheckAndGetPrivateKeyInWallet(senderAccounKey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
if Not RPCServer.CheckAndGetPrivateKeyInWallet(senderAccounKey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
- if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,senderAccounKey,targetAccountKey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
|
|
|
|
+ if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,senderAccounKey,targetAccountKey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
Result := TOpTransaction.CreateTransaction(current_protocol, sender,sender_last_n_operation+1,target,privateKey,amount,fee,LOpPayload);
|
|
Result := TOpTransaction.CreateTransaction(current_protocol, sender,sender_last_n_operation+1,target,privateKey,amount,fee,LOpPayload);
|
|
if Not Result.HasValidSignature then begin
|
|
if Not Result.HasValidSignature then begin
|
|
FreeAndNil(Result);
|
|
FreeAndNil(Result);
|
|
@@ -1221,7 +1285,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject;
|
|
Function CaptureAccountNumber(const AParamName : String; const ACheckAccountNumberExistsInSafebox : Boolean; var AAccountNumber : Cardinal; var AErrorParam : String) : Boolean;
|
|
Function CaptureAccountNumber(const AParamName : String; const ACheckAccountNumberExistsInSafebox : Boolean; var AAccountNumber : Cardinal; var AErrorParam : String) : Boolean;
|
|
var LParamValue : String;
|
|
var LParamValue : String;
|
|
Begin
|
|
Begin
|
|
- Result := TPascalCoinJSONComp.CaptureAccountNumber(params,AParamName,FNode.Bank,AAccountNumber,AErrorParam);
|
|
|
|
|
|
+ Result := TPascalCoinJSONComp.CaptureAccountNumber(params,AParamName,FNode,AAccountNumber,AErrorParam);
|
|
End;
|
|
End;
|
|
|
|
|
|
// This function creates a TOpChangeKey without looking for private key of account
|
|
// This function creates a TOpChangeKey without looking for private key of account
|
|
@@ -1236,7 +1300,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject;
|
|
Result := Nil;
|
|
Result := Nil;
|
|
LOpPayload := CT_TOperationPayload_NUL;
|
|
LOpPayload := CT_TOperationPayload_NUL;
|
|
if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
- if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_pubkey,new_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
|
|
|
|
+ if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,account_pubkey,new_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
If account_signer=account_target then begin
|
|
If account_signer=account_target then begin
|
|
Result := TOpChangeKey.Create(current_protocol,account_signer,account_last_n_operation+1,account_target,privateKey,new_pubkey,fee,LOpPayload);
|
|
Result := TOpChangeKey.Create(current_protocol,account_signer,account_last_n_operation+1,account_target,privateKey,new_pubkey,fee,LOpPayload);
|
|
end else begin
|
|
end else begin
|
|
@@ -1303,7 +1367,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject;
|
|
// If using 'dest', only will apply if there is a fixed new public key, otherwise will use current public key of account
|
|
// If using 'dest', only will apply if there is a fixed new public key, otherwise will use current public key of account
|
|
aux_target_pubkey := new_account_pubkey;
|
|
aux_target_pubkey := new_account_pubkey;
|
|
end else aux_target_pubkey := account_signer_pubkey;
|
|
end else aux_target_pubkey := account_signer_pubkey;
|
|
- if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_signer_pubkey,aux_target_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
|
|
|
|
+ if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,account_signer_pubkey,aux_target_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
Result := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(
|
|
Result := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(
|
|
current_protocol,
|
|
current_protocol,
|
|
ANewAccountState,
|
|
ANewAccountState,
|
|
@@ -1338,7 +1402,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject;
|
|
Result := Nil;
|
|
Result := Nil;
|
|
LOpPayload := CT_TOperationPayload_NUL;
|
|
LOpPayload := CT_TOperationPayload_NUL;
|
|
if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_signer_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_signer_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
- if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_signer_pubkey,account_signer_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
|
|
|
|
+ if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload, [ptNonDeterministic],Payload_method,EncodePwd,account_signer_pubkey,account_signer_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
Result := TOpDelistAccountForSale.CreateDelistAccountForSale(current_protocol,account_signer,account_last_n_operation+1,account_delisted,fee,privateKey,LOpPayload);
|
|
Result := TOpDelistAccountForSale.CreateDelistAccountForSale(current_protocol,account_signer,account_last_n_operation+1,account_delisted,fee,privateKey,LOpPayload);
|
|
if Not Result.HasValidSignature then begin
|
|
if Not Result.HasValidSignature then begin
|
|
FreeAndNil(Result);
|
|
FreeAndNil(Result);
|
|
@@ -1361,7 +1425,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject;
|
|
Begin
|
|
Begin
|
|
Result := Nil;
|
|
Result := Nil;
|
|
if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
- if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_pubkey,new_account_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
|
|
|
|
+ if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,account_pubkey,new_account_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
Result := TOpBuyAccount.CreateBuy(current_protocol,account_number,account_last_n_operation+1,account_to_buy,account_to_pay,account_price,amount,fee,new_account_pubkey,privateKey,LOpPayload);
|
|
Result := TOpBuyAccount.CreateBuy(current_protocol,account_number,account_last_n_operation+1,account_to_buy,account_to_pay,account_price,amount,fee,new_account_pubkey,privateKey,LOpPayload);
|
|
if Not Result.HasValidSignature then begin
|
|
if Not Result.HasValidSignature then begin
|
|
FreeAndNil(Result);
|
|
FreeAndNil(Result);
|
|
@@ -1866,7 +1930,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject;
|
|
// If using 'dest', only will apply if there is a fixed new public key, otherwise will use current public key of account
|
|
// If using 'dest', only will apply if there is a fixed new public key, otherwise will use current public key of account
|
|
aux_target_pubkey := new_account_pubkey;
|
|
aux_target_pubkey := new_account_pubkey;
|
|
end else aux_target_pubkey := account_signer_pubkey;
|
|
end else aux_target_pubkey := account_signer_pubkey;
|
|
- if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_signer_pubkey,aux_target_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
|
|
|
|
+ if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,account_signer_pubkey,aux_target_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil);
|
|
Result := TOpChangeAccountInfo.CreateChangeAccountInfo(current_protocol,
|
|
Result := TOpChangeAccountInfo.CreateChangeAccountInfo(current_protocol,
|
|
account_signer,account_last_n_operation+1,account_target,
|
|
account_signer,account_last_n_operation+1,account_target,
|
|
privateKey,
|
|
privateKey,
|