Links

Integrate with Slope Wallet (Mobile)

Establishing a Connection

  1. 1.
    Mobile applications and wallets are pulling up and passing references to each other using the URL scheme method.
  2. 2.
    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.
<queries>
<package android:name="com.xxx.yyy" />
</queries>

Connecting: Requires connection and returns wallet address

Reference format
slopewallet://wallet.slope/pay?returnSchemes=slopedapp://slope.dapp/pay?
slopePayReturn&slopePayParams={type: connect}
Formatted for post-transfer
slopewallet://wallet.slope/pay?
returnSchemes=736c6f7065646170703a2f2f736c6f70652e646170702f7061793f736c6f706550617952657475726e&slopePayParams=7b2274797065223a22636f6e6e656374227d
Description of parameters
Parameter
Data Type
Necessary
Formatting
Description
slopewallet://wallet.slope
String
Yes
N/A
Schema Protocol
returnSchemes
String
Yes
utf8+hex
Callbacks to scheme protocols, i.e. business-defined scheme protocols
slopePayParams
String
Yes
utf8+hex
Requires parameter
Description of the slopePayParams structure
Parameter
Data type
Necessary
Description
type
String
Yes
pay: indicates payment connect: indicates a connection

Wallet: Returns public key address

Return the public key address to mobile applications
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
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
slopewallet://wallet.slope/pay?
returnSchemes=736c6f7065646170703a2f2f736c6f70652e646170702f7061793f736c6f706550617952657475726e&slopePayParams=7b2274797065223a22706179222c2261646472657373223a2244595a4644487943733558786a794a364b59416b336f37713164686869755a59616a33596534615474523472222c22616d6f756e74223a22302e303031222c2273706c2d746f6b656e223a2245506a465764643541756671535371654d32714e31787a7962617043384734774547476b5a77795444743176222c226c6162656c223a224d69636861656c222c226d657373616765223a225468616e6b7320796f7572efbc81222c226d656d6f223a226f72646572303031227d
Description of parameters
Parameter
Data type
Necessary
Formatting
Description
slopewallet://wallet.slope
String
Yes
N/A
Schema protocal
returnSchemes
String
Yes
utf8+hex
Callbacks to scheme protocols, i.e. business-defined scheme protocols
slopePayParams
String
Yes
utf8+hex
Requires parameter
Description of slopePayParams structure
Parameter
Data type
Necessary
Description
type
String
Yes
pay: indicates payment connect: indicates a connection
address
String
Yes
Receiver's wallet address
memo
String
Yes
Order numbers, generated and managed by the mobile application itself
amount
String
Yes
Payment amount
symbol
String
Yes
Token symbol, may be empty if token is SOL
label
String
No
Title
message
String
No
Content
Mobile application transaction request code example
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
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.
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

slopedapp://slope.dapp/pay?
slopePayReturn=3U4AKtoCbUhEyBjN16aFUBgj6KRp84uJ7RS9DxHzjSeUj2bbSx8WvEqQN7DhL7JLhCSyiAZYD5QSzdtZj4CiGijv&type=pay&error={code: 80000000,message: SUCCESS.}
Parameter
Data type
Necessary
Formatting
Description
slopePayReturn
String
Yes
N/A
TxSignature returned on the push-to-chain structure for the query result as a string
type
String
Yes
N/A
pay: indicates payment connect: indicates a connection
error
String
No
N/A
A json string of the map structure, where the user represents the result of the operation
error code
error message
80000000
SUCCESS.
80000001
Unknown error.
80000002
Slope Wallet is not installed.
80000003
Slope Wallet app version is too low.
80000004
Insufficient account balance.
80000005
Token account is not created.
80000006
Unconfirmed transaction.
80000007
Transaction failed.