@@ -1052,6 +1052,91 @@ def thorchain_sign_tx(
10521052
10531053 return resp
10541054
1055+ @field ('address' )
1056+ @expect (mayachain_proto .MayachainAddress )
1057+ def mayachain_get_address (self , address_n , show_display = False , testnet = False ):
1058+ return self .call (
1059+ mayachain_proto .MayachainGetAddress (address_n = address_n , show_display = show_display , testnet = testnet )
1060+ )
1061+
1062+ @session
1063+ def mayachain_sign_tx (
1064+ self ,
1065+ address_n ,
1066+ account_number ,
1067+ chain_id ,
1068+ fee ,
1069+ gas ,
1070+ msgs ,
1071+ memo ,
1072+ sequence ,
1073+ testnet = None
1074+ ):
1075+ resp = self .call (mayachain_proto .MayachainSignTx (
1076+ address_n = address_n ,
1077+ account_number = account_number ,
1078+ chain_id = chain_id ,
1079+ fee_amount = fee ,
1080+ gas = gas ,
1081+ memo = memo ,
1082+ sequence = sequence ,
1083+ msg_count = len (msgs ),
1084+ testnet = testnet
1085+ ))
1086+
1087+ for msg in msgs :
1088+ if not isinstance (resp , mayachain_proto .MayachainMsgRequest ):
1089+ raise CallException (
1090+ "Mayachain.ExpectedMsgRequest" ,
1091+ "Message request expected but not received." ,
1092+ )
1093+
1094+ if msg ['type' ] == "mayachain/MsgSend" :
1095+ if len (msg ['value' ]['amount' ]) != 1 :
1096+ raise CallException ("Mayachain.MsgSend" , "Multiple amounts per send msg not supported" )
1097+
1098+ denom = msg ['value' ]['amount' ][0 ]['denom' ]
1099+
1100+ resp = self .call (mayachain_proto .MayachainMsgAck (
1101+ send = mayachain_proto .MayachainMsgSend (
1102+ from_address = msg ['value' ]['from_address' ],
1103+ to_address = msg ['value' ]['to_address' ],
1104+ amount = int (msg ['value' ]['amount' ][0 ]['amount' ]),
1105+ denom = denom ,
1106+ address_type = types .SPEND ,
1107+ )
1108+ ))
1109+
1110+ elif msg ['type' ] == "mayachain/MsgDeposit" :
1111+ if len (msg ['value' ]['coins' ]) != 1 :
1112+ raise CallException ("Mayachain.MsgDeposit" , "Multiple coins per deposit msg not supported" )
1113+
1114+ asset = msg ['value' ]['coins' ][0 ]['asset' ]
1115+ if asset != 'MAYA.CACAO' :
1116+ raise CallException ("Mayachain.MsgDeposit" , "Unsupported asset: " + asset )
1117+
1118+ resp = self .call (mayachain_proto .MayachainMsgAck (
1119+ deposit = mayachain_proto .MayachainMsgDeposit (
1120+ asset = asset ,
1121+ amount = int (msg ['value' ]['coins' ][0 ]['amount' ]),
1122+ memo = msg ['value' ]['memo' ],
1123+ signer = msg ['value' ]['signer' ]
1124+ )
1125+ ))
1126+
1127+ else :
1128+ raise CallException (
1129+ "Mayachain.UnknownMsg" ,
1130+ "Mayachain message %s is not yet supported" % (msg ['type' ],)
1131+ )
1132+
1133+ if not isinstance (resp , mayachain_proto .MayachainSignedTx ):
1134+ raise CallException (
1135+ "Mayachain.UnexpectedEndOfOperations" ,
1136+ "Reached end of operations without a signature." ,
1137+ )
1138+
1139+ return resp
10551140
10561141 @field ('address' )
10571142 @expect (ripple_proto .RippleAddress )
0 commit comments