Establishing a Connection
Mobile applications and wallets are pulling up and passing references to each other using the URL scheme method.
If the android device cannot pull up the other applications, you need to add the package name of the other applications to your AndroidManifest.xml.
Copy <queries>
<package android:name="com.xxx.yyy" />
</queries>
Connecting: Requires connection and returns wallet address
Mobile applications: Assembly link request
Reference format
Copy slopewallet://wallet.slope/pay?returnSchemes=slopedapp://slope.dapp/pay?
slopePayReturn&slopePayParams={type: connect}
Formatted for post-transfer
Copy slopewallet://wallet.slope/pay?
returnSchemes=736c6f7065646170703a2f2f736c6f70652e646170702f7061793f736c6f706550617952657475726e&slopePayParams=7b2274797065223a22636f6e6e656374227d
Description of parameters
Parameter
Data Type
Necessary
Formatting
Description
slopewallet://wallet.slope
Callbacks to scheme protocols, i.e. business-defined scheme protocols
Description of the slopePayParams structure
Parameter
Data type
Necessary
Description
pay: indicates payment connect: indicates a connection
Wallet: Returns public key address
Return the public key address to mobile applications
Copy slopedapp://slope.dapp/pay?
slopePayReturn=C4qGi2aeQ67GGSKcArKucxociBemWfpKCedQLuzau1M2&type=connect&error={code:200,message: testing mark}
Sending a transaction
Transaction Request
Mobile applications: Assembly Request Parameters.
Reference format
Copy slopewallet://wallet.slope/pay?returnSchemes=slopedapp://slope.dapp/pay?slopePayReturn&slopePayParams=
{
type: pay,
address: DYZFDHyCs5XxjyJ6KYAk3o7q1dhhiuZYaj3Ye4aTtR4r,
memo:000001
amount: 0.001,
symbol: SOL,
label: testing notes,
message: testing mark
}
Formatted for post-transfer
Copy slopewallet://wallet.slope/pay?
returnSchemes=736c6f7065646170703a2f2f736c6f70652e646170702f7061793f736c6f706550617952657475726e&slopePayParams=7b2274797065223a22706179222c2261646472657373223a2244595a4644487943733558786a794a364b59416b336f37713164686869755a59616a33596534615474523472222c22616d6f756e74223a22302e303031222c2273706c2d746f6b656e223a2245506a465764643541756671535371654d32714e31787a7962617043384734774547476b5a77795444743176222c226c6162656c223a224d69636861656c222c226d657373616765223a225468616e6b7320796f7572efbc81222c226d656d6f223a226f72646572303031227d
Description of parameters
Parameter
Data type
Necessary
Formatting
Description
slopewallet://wallet.slope
Callbacks to scheme protocols, i.e. business-defined scheme protocols
Description of slopePayParams structure
Parameter
Data type
Necessary
Description
pay: indicates payment connect: indicates a connection
Receiver's wallet address
Order numbers, generated and managed by the mobile application itself
Token symbol, may be empty if token is SOL
Mobile application transaction request code example
Copy String _strWalletSchemeUrl =
'slopewallet://wallet.slope/pay?returnSchemes=';
String _strMySchemeUrl = 'slopedapp://slope.dapp/pay?slopePayReturn';
void _send({Type type = Type.pay}) {
if (_adrsCtrl.text.isEmpty || _amountCtrl.text.isEmpty) return;
Map<String, dynamic> params = Map();
params['type'] = (Type.pay == type) ? 'pay' : 'connect';
if (Type.pay == type) {
params['address'] = _adrsCtrl.text;
params['amount'] = _amountCtrl.text;
params['memo'] = _memoCtrl.text;
if (_symbolCtrl.text.isNotEmpty) params['symbol'] = _symbolCtrl.text;
if (_titleCtrl.text.isNotEmpty) params['label'] = _titleCtrl.text;
if (_msgCtrl.text.isNotEmpty) params['message'] = _msgCtrl.text;
}
String strEnParams = convert.jsonEncode(params);
String strCovertParams = _covertString(strInput: strEnParams);
String strMyEncodeScheme = _covertString(strInput: _strMySchemeUrl);
String strDecodeParam = Uri.encodeComponent(strCovertParams);
_strSendScheme = _strWalletSchemeUrl +
strMyEncodeScheme +
'&slopePayParams=' +
strDecodeParam;
_launchURL(context, _strSendScheme);
}
Wallet transaction signature code example
Copy String baseUrl = 'slopewallet://wallet.slope/pay?';
String oriUrl = uri?.toString().toLowerCase() ?? '';
if (false == oriUrl.startsWith(baseUrl)) return;
// prase scheme
String? strRetScheme = uri?.queryParameters['returnSchemes'];
if (null == strRetScheme || strRetScheme is! String) return;
if (strRetScheme.isEmpty) return;
var decodeScheme = hex.decode(strRetScheme);
var strScheme = utf8.decode(decodeScheme);
strRetScheme = strScheme.toString();
// prase params
String? strOriParam = uri?.queryParameters['slopePayParams'];
if (null == strOriParam || strOriParam is! String) return;
String strOriParamCom = Uri.decodeComponent(strOriParam);
var decode = hex.decode(strOriParamCom);
var strParam = utf8.decode(decode);
logger.d('pay param:$strParam');
var json = convert.jsonDecode(strParam);
SchemeModel model = SchemeModel.fromJson(json);
WalletEntity? wallet = context.read<WalletMainModel>().currentWallet;
if (null == wallet) return;
model.urlScheme = strRetScheme;
Signing a Message
Once the mobile applications pulls up the wallet and sends the transaction information, it indicates that the user has allowed the native wallet application to sign and send the transaction to the chain.
Copy dynamic siginTx = await WalletMainModel().approve(
privateKey: prKey,
sourceAddress: coinFind.splAddress,
sendAddress: model.address,
mintAddressSend: mintAddress,
amount: model.amount.toString(),
);
if (siginTx is String && siginTx.isEmpty) {
if (showing) Navigator.pop(context);
logger.d('Token no exist $siginTx');
return;
}
String strRet = await WalletMainModel().push(siginTx);
String strScheme =
model.urlScheme + '=$strRet' + '&type=${model.type, model.memo}';
Wallet: Assembly response parameters
Copy slopedapp://slope.dapp/pay?
slopePayReturn=3U4AKtoCbUhEyBjN16aFUBgj6KRp84uJ7RS9DxHzjSeUj2bbSx8WvEqQN7DhL7JLhCSyiAZYD5QSzdtZj4CiGijv&type=pay&error={code: 80000000,message: SUCCESS.}
Parameter
Data type
Necessary
Formatting
Description
TxSignature returned on the push-to-chain structure for the query result as a string
pay: indicates payment connect: indicates a connection
A json string of the map structure, where the user represents the result of the operation
Slope Wallet is not installed.
Slope Wallet app version is too low.
Insufficient account balance.
Token account is not created.