Repository files navigation

THIS REPOSITORY IS NOT FINISHED. README IS NOT UP TO DATE. EXPECT DRAGONS. SEE TESTS FOR CURRENT IMPLEMENTATIONS.

XRPLSwift

A pure Swift implementation for interacting with the XRP Ledger, the XRPLSwift library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing, by providing native Swift methods and models for XRP Ledger transactions and core server API (rippled) objects.

// create a network client
letclient=tryXrplClient(server:"https://s.altnet.rippletest.net:51234/")
// create a wallet on the testnet
lettestWallet:Wallet= client.fundWallet()print(testWallet)
// publicKey: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// privateKey: -HIDDEN-
// classicAddress: rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo
// look up account info
letacctInfo:AccountInfo=AccountInfo(
account:"rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
ledgerIndex:"current",
queue:true,
strict:true,)letresponse:BaseResponse<AccountInfoResponse>= client.request(req: acctInfo)letresult= response.result
print(result)
// {
// "Account": "rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
// "Balance": "1000000000",
// "Flags": 0,
// "LedgerEntryType": "AccountRoot",
// "OwnerCount": 0,
// "PreviousTxnID": "73CD4A37537A992270AAC8472F6681F44E400CBDE04EC8983C34B519F56AB107",
// "PreviousTxnLgrSeq": 16233962,
// "Sequence": 16233962,
// "index": "FD66EC588B52712DCE74831DCB08B24157DC3198C29A0116AA64D310A58512D7"
// }

Contributors

Installation and supported versions

Swift Package Manager

You can use The Swift Package Manager to install XRPLSwift by adding it to your Package.swift file:

// swift-tools-version:5.7
import PackageDescription
letpackage=Package(
name:"YOUR_PROJECT_NAME",
dependencies:[.package(url:"https://github.com/Transia-RnD/XRPLSwift.git", from:"1.0.0"),])

Linux Compatibility

One of the goals of this library is to provide cross-platform support for Linux and support server-side Swift, however some features may only be available in iOS/macOS due to a lack of Linux supported libraries (ex. WebSockets). A test_linux.sh file is included that will run tests in a docker container. All contributions must compile on Linux.

The library supports Swift 5.7.1 and later.

Supported VersionsPlatformsCompatible

Features

Use XRPLSwift to build Swift applications that leverage the XRP Ledger. The library helps with all aspects of interacting with the XRP Ledger, including:

  • Key and wallet management
  • Serialization
  • Transaction Signing

XRPLSwift also provides:

  • A network client — See XrplClient for more information.
  • Methods for inspecting accounts — See XRPL Account Methods for more information.
  • Codecs for encoding and decoding addresses and other objects — See Core Codecs for more information.

See the complete XRPLSwift reference documentation on Read the Docs.

Usage

The following sections describe some of the most commonly used modules in the XRPLSwift library and provide sample code.

Network client

Use the XrplClient library to create a network client for connecting to the XRP Ledger.

leturl:String="wss://s1.ripple.com"letclient:XrplClient=try?XrplClient(server: url)

Manage keys and wallets

Wallet

Use the Wallet module to create a wallet from a given seed or or via a Testnet faucet.

To create a wallet from a seed (in this case, the value generated using Keypairs):

letwalletFromSeed:Wallet=Wallet.Wallet(seed: seed)print(walletFromSeed)
// publicKey: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0
// privateKey: -HIDDEN-
// classicAddress: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6

To create a wallet from a Testnet faucet:

lettestWallet:Wallet=fundWallet(client: client)lettestAccount:String= testWallet.classicAddress
print("Classic address: \(testAccount)")
// Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw

Keypairs

Use the Keypairs module to generate seeds and derive keypairs and addresses from those seed values.

Here's an example of how to generate a seed value and derive an XRP Ledger "classic" address from that seed.

letseed:String= keypairs.generateSeed()let(public, private)=Keypairs.deriveKeypair(seed: seed)lettestAccount:String=Keypairs.deriveClassicAddress(publicKey: public)print("Here's the public key: \(public)")print("Here's the private key: \(private)")print("Store this in a secure place!")
// Here's the public key: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// Here's the private key: EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD
// Store this in a secure place!

Note: You can use Keypairs.sign to sign transactions but XRPLSwift also provides explicit methods for safely signing and submitting transactions. See Transaction Signing and XRPL Transaction Methods for more information.

Subscribe to ledger updates

You can send subscribe and unsubscribe requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared.

url ="wss://s.altnet.rippletest.net/"
req =Subscribe(streams=[StreamParameter.LEDGER])
// NOTE: this code will run forever without a timeout, until the process is killed
with WebsocketClient(url)asclient:
client.send(req)
for message in client:
print(message)
// {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'}

Encode addresses

Use AddressCodec to encode and decode addresses into and from the "classic" and X-address formats.

// convert classic address to x-address
testnetXAddress =tryAddressCodec.classicAddressToXaddress(
classicAddress:"rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz",
tag:0,
isTest:true)print(testnetXAddress)
// T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps

Contributing

If you want to contribute to this project, see CONTRIBUTING.md.

Mailing Lists

We have a low-traffic mailing list for announcements of new XRPLSwift releases. (About 1 email per week)

If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

Report an issue

Experienced an issue? Report it here.

License

The XRPLSwift library is licensed under the ISC License. See LICENSE for more information.

About

A Swift/Linux library to interact with the XRP Ledger (XRPL) blockchain

Topics

Resources

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

THIS REPOSITORY IS NOT FINISHED. README IS NOT UP TO DATE. EXPECT DRAGONS. SEE TESTS FOR CURRENT IMPLEMENTATIONS.

XRPLSwift

A pure Swift implementation for interacting with the XRP Ledger, the XRPLSwift library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing, by providing native Swift methods and models for XRP Ledger transactions and core server API (rippled) objects.

// create a network client
letclient=tryXrplClient(server:"https://s.altnet.rippletest.net:51234/")
// create a wallet on the testnet
lettestWallet:Wallet= client.fundWallet()print(testWallet)
// publicKey: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// privateKey: -HIDDEN-
// classicAddress: rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo
// look up account info
letacctInfo:AccountInfo=AccountInfo(
account:"rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
ledgerIndex:"current",
queue:true,
strict:true,)letresponse:BaseResponse<AccountInfoResponse>= client.request(req: acctInfo)letresult= response.result
print(result)
// {
// "Account": "rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
// "Balance": "1000000000",
// "Flags": 0,
// "LedgerEntryType": "AccountRoot",
// "OwnerCount": 0,
// "PreviousTxnID": "73CD4A37537A992270AAC8472F6681F44E400CBDE04EC8983C34B519F56AB107",
// "PreviousTxnLgrSeq": 16233962,
// "Sequence": 16233962,
// "index": "FD66EC588B52712DCE74831DCB08B24157DC3198C29A0116AA64D310A58512D7"
// }

Contributors

Installation and supported versions

Swift Package Manager

You can use The Swift Package Manager to install XRPLSwift by adding it to your Package.swift file:

// swift-tools-version:5.7
import PackageDescription
letpackage=Package(
name:"YOUR_PROJECT_NAME",
dependencies:[.package(url:"https://github.com/Transia-RnD/XRPLSwift.git", from:"1.0.0"),])

Linux Compatibility

One of the goals of this library is to provide cross-platform support for Linux and support server-side Swift, however some features may only be available in iOS/macOS due to a lack of Linux supported libraries (ex. WebSockets). A test_linux.sh file is included that will run tests in a docker container. All contributions must compile on Linux.

The library supports Swift 5.7.1 and later.

Supported VersionsPlatformsCompatible

Features

Use XRPLSwift to build Swift applications that leverage the XRP Ledger. The library helps with all aspects of interacting with the XRP Ledger, including:

  • Key and wallet management
  • Serialization
  • Transaction Signing

XRPLSwift also provides:

  • A network client — See XrplClient for more information.
  • Methods for inspecting accounts — See XRPL Account Methods for more information.
  • Codecs for encoding and decoding addresses and other objects — See Core Codecs for more information.

See the complete XRPLSwift reference documentation on Read the Docs.

Usage

The following sections describe some of the most commonly used modules in the XRPLSwift library and provide sample code.

Network client

Use the XrplClient library to create a network client for connecting to the XRP Ledger.

leturl:String="wss://s1.ripple.com"letclient:XrplClient=try?XrplClient(server: url)

Manage keys and wallets

Wallet

Use the Wallet module to create a wallet from a given seed or or via a Testnet faucet.

To create a wallet from a seed (in this case, the value generated using Keypairs):

letwalletFromSeed:Wallet=Wallet.Wallet(seed: seed)print(walletFromSeed)
// publicKey: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0
// privateKey: -HIDDEN-
// classicAddress: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6

To create a wallet from a Testnet faucet:

lettestWallet:Wallet=fundWallet(client: client)lettestAccount:String= testWallet.classicAddress
print("Classic address: \(testAccount)")
// Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw

Keypairs

Use the Keypairs module to generate seeds and derive keypairs and addresses from those seed values.

Here's an example of how to generate a seed value and derive an XRP Ledger "classic" address from that seed.

letseed:String= keypairs.generateSeed()let(public, private)=Keypairs.deriveKeypair(seed: seed)lettestAccount:String=Keypairs.deriveClassicAddress(publicKey: public)print("Here's the public key: \(public)")print("Here's the private key: \(private)")print("Store this in a secure place!")
// Here's the public key: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// Here's the private key: EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD
// Store this in a secure place!

Note: You can use Keypairs.sign to sign transactions but XRPLSwift also provides explicit methods for safely signing and submitting transactions. See Transaction Signing and XRPL Transaction Methods for more information.

Subscribe to ledger updates

You can send subscribe and unsubscribe requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared.

url ="wss://s.altnet.rippletest.net/"
req =Subscribe(streams=[StreamParameter.LEDGER])
// NOTE: this code will run forever without a timeout, until the process is killed
with WebsocketClient(url)asclient:
client.send(req)
for message in client:
print(message)
// {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'}

Encode addresses

Use AddressCodec to encode and decode addresses into and from the "classic" and X-address formats.

// convert classic address to x-address
testnetXAddress =tryAddressCodec.classicAddressToXaddress(
classicAddress:"rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz",
tag:0,
isTest:true)print(testnetXAddress)
// T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps

Contributing

If you want to contribute to this project, see CONTRIBUTING.md.

Mailing Lists

We have a low-traffic mailing list for announcements of new XRPLSwift releases. (About 1 email per week)

If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

Report an issue

Experienced an issue? Report it here.

License

The XRPLSwift library is licensed under the ISC License. See LICENSE for more information.

About

A Swift/Linux library to interact with the XRP Ledger (XRPL) blockchain

Topics

Resources

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

THIS REPOSITORY IS NOT FINISHED. README IS NOT UP TO DATE. EXPECT DRAGONS. SEE TESTS FOR CURRENT IMPLEMENTATIONS.

XRPLSwift

A pure Swift implementation for interacting with the XRP Ledger, the XRPLSwift library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing, by providing native Swift methods and models for XRP Ledger transactions and core server API (rippled) objects.

// create a network client
letclient=tryXrplClient(server:"https://s.altnet.rippletest.net:51234/")
// create a wallet on the testnet
lettestWallet:Wallet= client.fundWallet()print(testWallet)
// publicKey: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// privateKey: -HIDDEN-
// classicAddress: rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo
// look up account info
letacctInfo:AccountInfo=AccountInfo(
account:"rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
ledgerIndex:"current",
queue:true,
strict:true,)letresponse:BaseResponse<AccountInfoResponse>= client.request(req: acctInfo)letresult= response.result
print(result)
// {
// "Account": "rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
// "Balance": "1000000000",
// "Flags": 0,
// "LedgerEntryType": "AccountRoot",
// "OwnerCount": 0,
// "PreviousTxnID": "73CD4A37537A992270AAC8472F6681F44E400CBDE04EC8983C34B519F56AB107",
// "PreviousTxnLgrSeq": 16233962,
// "Sequence": 16233962,
// "index": "FD66EC588B52712DCE74831DCB08B24157DC3198C29A0116AA64D310A58512D7"
// }

Contributors

Installation and supported versions

Swift Package Manager

You can use The Swift Package Manager to install XRPLSwift by adding it to your Package.swift file:

// swift-tools-version:5.7
import PackageDescription
letpackage=Package(
name:"YOUR_PROJECT_NAME",
dependencies:[.package(url:"https://github.com/Transia-RnD/XRPLSwift.git", from:"1.0.0"),])

Linux Compatibility

One of the goals of this library is to provide cross-platform support for Linux and support server-side Swift, however some features may only be available in iOS/macOS due to a lack of Linux supported libraries (ex. WebSockets). A test_linux.sh file is included that will run tests in a docker container. All contributions must compile on Linux.

The library supports Swift 5.7.1 and later.

Supported VersionsPlatformsCompatible

Features

Use XRPLSwift to build Swift applications that leverage the XRP Ledger. The library helps with all aspects of interacting with the XRP Ledger, including:

  • Key and wallet management
  • Serialization
  • Transaction Signing

XRPLSwift also provides:

  • A network client — See XrplClient for more information.
  • Methods for inspecting accounts — See XRPL Account Methods for more information.
  • Codecs for encoding and decoding addresses and other objects — See Core Codecs for more information.

See the complete XRPLSwift reference documentation on Read the Docs.

Usage

The following sections describe some of the most commonly used modules in the XRPLSwift library and provide sample code.

Network client

Use the XrplClient library to create a network client for connecting to the XRP Ledger.

leturl:String="wss://s1.ripple.com"letclient:XrplClient=try?XrplClient(server: url)

Manage keys and wallets

Wallet

Use the Wallet module to create a wallet from a given seed or or via a Testnet faucet.

To create a wallet from a seed (in this case, the value generated using Keypairs):

letwalletFromSeed:Wallet=Wallet.Wallet(seed: seed)print(walletFromSeed)
// publicKey: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0
// privateKey: -HIDDEN-
// classicAddress: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6

To create a wallet from a Testnet faucet:

lettestWallet:Wallet=fundWallet(client: client)lettestAccount:String= testWallet.classicAddress
print("Classic address: \(testAccount)")
// Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw

Keypairs

Use the Keypairs module to generate seeds and derive keypairs and addresses from those seed values.

Here's an example of how to generate a seed value and derive an XRP Ledger "classic" address from that seed.

letseed:String= keypairs.generateSeed()let(public, private)=Keypairs.deriveKeypair(seed: seed)lettestAccount:String=Keypairs.deriveClassicAddress(publicKey: public)print("Here's the public key: \(public)")print("Here's the private key: \(private)")print("Store this in a secure place!")
// Here's the public key: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// Here's the private key: EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD
// Store this in a secure place!

Note: You can use Keypairs.sign to sign transactions but XRPLSwift also provides explicit methods for safely signing and submitting transactions. See Transaction Signing and XRPL Transaction Methods for more information.

Subscribe to ledger updates

You can send subscribe and unsubscribe requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared.

url ="wss://s.altnet.rippletest.net/"
req =Subscribe(streams=[StreamParameter.LEDGER])
// NOTE: this code will run forever without a timeout, until the process is killed
with WebsocketClient(url)asclient:
client.send(req)
for message in client:
print(message)
// {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'}

Encode addresses

Use AddressCodec to encode and decode addresses into and from the "classic" and X-address formats.

// convert classic address to x-address
testnetXAddress =tryAddressCodec.classicAddressToXaddress(
classicAddress:"rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz",
tag:0,
isTest:true)print(testnetXAddress)
// T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps

Contributing

If you want to contribute to this project, see CONTRIBUTING.md.

Mailing Lists

We have a low-traffic mailing list for announcements of new XRPLSwift releases. (About 1 email per week)

If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

Report an issue

Experienced an issue? Report it here.

License

The XRPLSwift library is licensed under the ISC License. See LICENSE for more information.

About

A Swift/Linux library to interact with the XRP Ledger (XRPL) blockchain

Topics

Resources

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

THIS REPOSITORY IS NOT FINISHED. README IS NOT UP TO DATE. EXPECT DRAGONS. SEE TESTS FOR CURRENT IMPLEMENTATIONS.

XRPLSwift

A pure Swift implementation for interacting with the XRP Ledger, the XRPLSwift library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing, by providing native Swift methods and models for XRP Ledger transactions and core server API (rippled) objects.

// create a network client
letclient=tryXrplClient(server:"https://s.altnet.rippletest.net:51234/")
// create a wallet on the testnet
lettestWallet:Wallet= client.fundWallet()print(testWallet)
// publicKey: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// privateKey: -HIDDEN-
// classicAddress: rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo
// look up account info
letacctInfo:AccountInfo=AccountInfo(
account:"rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
ledgerIndex:"current",
queue:true,
strict:true,)letresponse:BaseResponse<AccountInfoResponse>= client.request(req: acctInfo)letresult= response.result
print(result)
// {
// "Account": "rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
// "Balance": "1000000000",
// "Flags": 0,
// "LedgerEntryType": "AccountRoot",
// "OwnerCount": 0,
// "PreviousTxnID": "73CD4A37537A992270AAC8472F6681F44E400CBDE04EC8983C34B519F56AB107",
// "PreviousTxnLgrSeq": 16233962,
// "Sequence": 16233962,
// "index": "FD66EC588B52712DCE74831DCB08B24157DC3198C29A0116AA64D310A58512D7"
// }

Contributors

Installation and supported versions

Swift Package Manager

You can use The Swift Package Manager to install XRPLSwift by adding it to your Package.swift file:

// swift-tools-version:5.7
import PackageDescription
letpackage=Package(
name:"YOUR_PROJECT_NAME",
dependencies:[.package(url:"https://github.com/Transia-RnD/XRPLSwift.git", from:"1.0.0"),])

Linux Compatibility

One of the goals of this library is to provide cross-platform support for Linux and support server-side Swift, however some features may only be available in iOS/macOS due to a lack of Linux supported libraries (ex. WebSockets). A test_linux.sh file is included that will run tests in a docker container. All contributions must compile on Linux.

The library supports Swift 5.7.1 and later.

Supported VersionsPlatformsCompatible

Features

Use XRPLSwift to build Swift applications that leverage the XRP Ledger. The library helps with all aspects of interacting with the XRP Ledger, including:

  • Key and wallet management
  • Serialization
  • Transaction Signing

XRPLSwift also provides:

  • A network client — See XrplClient for more information.
  • Methods for inspecting accounts — See XRPL Account Methods for more information.
  • Codecs for encoding and decoding addresses and other objects — See Core Codecs for more information.

See the complete XRPLSwift reference documentation on Read the Docs.

Usage

The following sections describe some of the most commonly used modules in the XRPLSwift library and provide sample code.

Network client

Use the XrplClient library to create a network client for connecting to the XRP Ledger.

leturl:String="wss://s1.ripple.com"letclient:XrplClient=try?XrplClient(server: url)

Manage keys and wallets

Wallet

Use the Wallet module to create a wallet from a given seed or or via a Testnet faucet.

To create a wallet from a seed (in this case, the value generated using Keypairs):

letwalletFromSeed:Wallet=Wallet.Wallet(seed: seed)print(walletFromSeed)
// publicKey: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0
// privateKey: -HIDDEN-
// classicAddress: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6

To create a wallet from a Testnet faucet:

lettestWallet:Wallet=fundWallet(client: client)lettestAccount:String= testWallet.classicAddress
print("Classic address: \(testAccount)")
// Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw

Keypairs

Use the Keypairs module to generate seeds and derive keypairs and addresses from those seed values.

Here's an example of how to generate a seed value and derive an XRP Ledger "classic" address from that seed.

letseed:String= keypairs.generateSeed()let(public, private)=Keypairs.deriveKeypair(seed: seed)lettestAccount:String=Keypairs.deriveClassicAddress(publicKey: public)print("Here's the public key: \(public)")print("Here's the private key: \(private)")print("Store this in a secure place!")
// Here's the public key: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// Here's the private key: EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD
// Store this in a secure place!

Note: You can use Keypairs.sign to sign transactions but XRPLSwift also provides explicit methods for safely signing and submitting transactions. See Transaction Signing and XRPL Transaction Methods for more information.

Subscribe to ledger updates

You can send subscribe and unsubscribe requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared.

url ="wss://s.altnet.rippletest.net/"
req =Subscribe(streams=[StreamParameter.LEDGER])
// NOTE: this code will run forever without a timeout, until the process is killed
with WebsocketClient(url)asclient:
client.send(req)
for message in client:
print(message)
// {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'}

Encode addresses

Use AddressCodec to encode and decode addresses into and from the "classic" and X-address formats.

// convert classic address to x-address
testnetXAddress =tryAddressCodec.classicAddressToXaddress(
classicAddress:"rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz",
tag:0,
isTest:true)print(testnetXAddress)
// T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps

Contributing

If you want to contribute to this project, see CONTRIBUTING.md.

Mailing Lists

We have a low-traffic mailing list for announcements of new XRPLSwift releases. (About 1 email per week)

If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

Report an issue

Experienced an issue? Report it here.

License

The XRPLSwift library is licensed under the ISC License. See LICENSE for more information.

About

A Swift/Linux library to interact with the XRP Ledger (XRPL) blockchain

Topics

Resources

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

THIS REPOSITORY IS NOT FINISHED. README IS NOT UP TO DATE. EXPECT DRAGONS. SEE TESTS FOR CURRENT IMPLEMENTATIONS.

XRPLSwift

A pure Swift implementation for interacting with the XRP Ledger, the XRPLSwift library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing, by providing native Swift methods and models for XRP Ledger transactions and core server API (rippled) objects.

// create a network client
letclient=tryXrplClient(server:"https://s.altnet.rippletest.net:51234/")
// create a wallet on the testnet
lettestWallet:Wallet= client.fundWallet()print(testWallet)
// publicKey: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// privateKey: -HIDDEN-
// classicAddress: rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo
// look up account info
letacctInfo:AccountInfo=AccountInfo(
account:"rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
ledgerIndex:"current",
queue:true,
strict:true,)letresponse:BaseResponse<AccountInfoResponse>= client.request(req: acctInfo)letresult= response.result
print(result)
// {
// "Account": "rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
// "Balance": "1000000000",
// "Flags": 0,
// "LedgerEntryType": "AccountRoot",
// "OwnerCount": 0,
// "PreviousTxnID": "73CD4A37537A992270AAC8472F6681F44E400CBDE04EC8983C34B519F56AB107",
// "PreviousTxnLgrSeq": 16233962,
// "Sequence": 16233962,
// "index": "FD66EC588B52712DCE74831DCB08B24157DC3198C29A0116AA64D310A58512D7"
// }

Contributors

Installation and supported versions

Swift Package Manager

You can use The Swift Package Manager to install XRPLSwift by adding it to your Package.swift file:

// swift-tools-version:5.7
import PackageDescription
letpackage=Package(
name:"YOUR_PROJECT_NAME",
dependencies:[.package(url:"https://github.com/Transia-RnD/XRPLSwift.git", from:"1.0.0"),])

Linux Compatibility

One of the goals of this library is to provide cross-platform support for Linux and support server-side Swift, however some features may only be available in iOS/macOS due to a lack of Linux supported libraries (ex. WebSockets). A test_linux.sh file is included that will run tests in a docker container. All contributions must compile on Linux.

The library supports Swift 5.7.1 and later.

Supported VersionsPlatformsCompatible

Features

Use XRPLSwift to build Swift applications that leverage the XRP Ledger. The library helps with all aspects of interacting with the XRP Ledger, including:

  • Key and wallet management
  • Serialization
  • Transaction Signing

XRPLSwift also provides:

  • A network client — See XrplClient for more information.
  • Methods for inspecting accounts — See XRPL Account Methods for more information.
  • Codecs for encoding and decoding addresses and other objects — See Core Codecs for more information.

See the complete XRPLSwift reference documentation on Read the Docs.

Usage

The following sections describe some of the most commonly used modules in the XRPLSwift library and provide sample code.

Network client

Use the XrplClient library to create a network client for connecting to the XRP Ledger.

leturl:String="wss://s1.ripple.com"letclient:XrplClient=try?XrplClient(server: url)

Manage keys and wallets

Wallet

Use the Wallet module to create a wallet from a given seed or or via a Testnet faucet.

To create a wallet from a seed (in this case, the value generated using Keypairs):

letwalletFromSeed:Wallet=Wallet.Wallet(seed: seed)print(walletFromSeed)
// publicKey: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0
// privateKey: -HIDDEN-
// classicAddress: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6

To create a wallet from a Testnet faucet:

lettestWallet:Wallet=fundWallet(client: client)lettestAccount:String= testWallet.classicAddress
print("Classic address: \(testAccount)")
// Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw

Keypairs

Use the Keypairs module to generate seeds and derive keypairs and addresses from those seed values.

Here's an example of how to generate a seed value and derive an XRP Ledger "classic" address from that seed.

letseed:String= keypairs.generateSeed()let(public, private)=Keypairs.deriveKeypair(seed: seed)lettestAccount:String=Keypairs.deriveClassicAddress(publicKey: public)print("Here's the public key: \(public)")print("Here's the private key: \(private)")print("Store this in a secure place!")
// Here's the public key: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// Here's the private key: EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD
// Store this in a secure place!

Note: You can use Keypairs.sign to sign transactions but XRPLSwift also provides explicit methods for safely signing and submitting transactions. See Transaction Signing and XRPL Transaction Methods for more information.

Subscribe to ledger updates

You can send subscribe and unsubscribe requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared.

url ="wss://s.altnet.rippletest.net/"
req =Subscribe(streams=[StreamParameter.LEDGER])
// NOTE: this code will run forever without a timeout, until the process is killed
with WebsocketClient(url)asclient:
client.send(req)
for message in client:
print(message)
// {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'}

Encode addresses

Use AddressCodec to encode and decode addresses into and from the "classic" and X-address formats.

// convert classic address to x-address
testnetXAddress =tryAddressCodec.classicAddressToXaddress(
classicAddress:"rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz",
tag:0,
isTest:true)print(testnetXAddress)
// T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps

Contributing

If you want to contribute to this project, see CONTRIBUTING.md.

Mailing Lists

We have a low-traffic mailing list for announcements of new XRPLSwift releases. (About 1 email per week)

If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

Report an issue

Experienced an issue? Report it here.

License

The XRPLSwift library is licensed under the ISC License. See LICENSE for more information.

About

A Swift/Linux library to interact with the XRP Ledger (XRPL) blockchain

Topics

Resources

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

THIS REPOSITORY IS NOT FINISHED. README IS NOT UP TO DATE. EXPECT DRAGONS. SEE TESTS FOR CURRENT IMPLEMENTATIONS.

XRPLSwift

A pure Swift implementation for interacting with the XRP Ledger, the XRPLSwift library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing, by providing native Swift methods and models for XRP Ledger transactions and core server API (rippled) objects.

// create a network client
letclient=tryXrplClient(server:"https://s.altnet.rippletest.net:51234/")
// create a wallet on the testnet
lettestWallet:Wallet= client.fundWallet()print(testWallet)
// publicKey: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// privateKey: -HIDDEN-
// classicAddress: rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo
// look up account info
letacctInfo:AccountInfo=AccountInfo(
account:"rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
ledgerIndex:"current",
queue:true,
strict:true,)letresponse:BaseResponse<AccountInfoResponse>= client.request(req: acctInfo)letresult= response.result
print(result)
// {
// "Account": "rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
// "Balance": "1000000000",
// "Flags": 0,
// "LedgerEntryType": "AccountRoot",
// "OwnerCount": 0,
// "PreviousTxnID": "73CD4A37537A992270AAC8472F6681F44E400CBDE04EC8983C34B519F56AB107",
// "PreviousTxnLgrSeq": 16233962,
// "Sequence": 16233962,
// "index": "FD66EC588B52712DCE74831DCB08B24157DC3198C29A0116AA64D310A58512D7"
// }

Contributors

Installation and supported versions

Swift Package Manager

You can use The Swift Package Manager to install XRPLSwift by adding it to your Package.swift file:

// swift-tools-version:5.7
import PackageDescription
letpackage=Package(
name:"YOUR_PROJECT_NAME",
dependencies:[.package(url:"https://github.com/Transia-RnD/XRPLSwift.git", from:"1.0.0"),])

Linux Compatibility

One of the goals of this library is to provide cross-platform support for Linux and support server-side Swift, however some features may only be available in iOS/macOS due to a lack of Linux supported libraries (ex. WebSockets). A test_linux.sh file is included that will run tests in a docker container. All contributions must compile on Linux.

The library supports Swift 5.7.1 and later.

Supported VersionsPlatformsCompatible

Features

Use XRPLSwift to build Swift applications that leverage the XRP Ledger. The library helps with all aspects of interacting with the XRP Ledger, including:

  • Key and wallet management
  • Serialization
  • Transaction Signing

XRPLSwift also provides:

  • A network client — See XrplClient for more information.
  • Methods for inspecting accounts — See XRPL Account Methods for more information.
  • Codecs for encoding and decoding addresses and other objects — See Core Codecs for more information.

See the complete XRPLSwift reference documentation on Read the Docs.

Usage

The following sections describe some of the most commonly used modules in the XRPLSwift library and provide sample code.

Network client

Use the XrplClient library to create a network client for connecting to the XRP Ledger.

leturl:String="wss://s1.ripple.com"letclient:XrplClient=try?XrplClient(server: url)

Manage keys and wallets

Wallet

Use the Wallet module to create a wallet from a given seed or or via a Testnet faucet.

To create a wallet from a seed (in this case, the value generated using Keypairs):

letwalletFromSeed:Wallet=Wallet.Wallet(seed: seed)print(walletFromSeed)
// publicKey: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0
// privateKey: -HIDDEN-
// classicAddress: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6

To create a wallet from a Testnet faucet:

lettestWallet:Wallet=fundWallet(client: client)lettestAccount:String= testWallet.classicAddress
print("Classic address: \(testAccount)")
// Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw

Keypairs

Use the Keypairs module to generate seeds and derive keypairs and addresses from those seed values.

Here's an example of how to generate a seed value and derive an XRP Ledger "classic" address from that seed.

letseed:String= keypairs.generateSeed()let(public, private)=Keypairs.deriveKeypair(seed: seed)lettestAccount:String=Keypairs.deriveClassicAddress(publicKey: public)print("Here's the public key: \(public)")print("Here's the private key: \(private)")print("Store this in a secure place!")
// Here's the public key: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// Here's the private key: EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD
// Store this in a secure place!

Note: You can use Keypairs.sign to sign transactions but XRPLSwift also provides explicit methods for safely signing and submitting transactions. See Transaction Signing and XRPL Transaction Methods for more information.

Subscribe to ledger updates

You can send subscribe and unsubscribe requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared.

url ="wss://s.altnet.rippletest.net/"
req =Subscribe(streams=[StreamParameter.LEDGER])
// NOTE: this code will run forever without a timeout, until the process is killed
with WebsocketClient(url)asclient:
client.send(req)
for message in client:
print(message)
// {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'}

Encode addresses

Use AddressCodec to encode and decode addresses into and from the "classic" and X-address formats.

// convert classic address to x-address
testnetXAddress =tryAddressCodec.classicAddressToXaddress(
classicAddress:"rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz",
tag:0,
isTest:true)print(testnetXAddress)
// T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps

Contributing

If you want to contribute to this project, see CONTRIBUTING.md.

Mailing Lists

We have a low-traffic mailing list for announcements of new XRPLSwift releases. (About 1 email per week)

If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

Report an issue

Experienced an issue? Report it here.

License

The XRPLSwift library is licensed under the ISC License. See LICENSE for more information.

About

A Swift/Linux library to interact with the XRP Ledger (XRPL) blockchain

Topics

Resources

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

THIS REPOSITORY IS NOT FINISHED. README IS NOT UP TO DATE. EXPECT DRAGONS. SEE TESTS FOR CURRENT IMPLEMENTATIONS.

XRPLSwift

A pure Swift implementation for interacting with the XRP Ledger, the XRPLSwift library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing, by providing native Swift methods and models for XRP Ledger transactions and core server API (rippled) objects.

// create a network client
letclient=tryXrplClient(server:"https://s.altnet.rippletest.net:51234/")
// create a wallet on the testnet
lettestWallet:Wallet= client.fundWallet()print(testWallet)
// publicKey: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// privateKey: -HIDDEN-
// classicAddress: rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo
// look up account info
letacctInfo:AccountInfo=AccountInfo(
account:"rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
ledgerIndex:"current",
queue:true,
strict:true,)letresponse:BaseResponse<AccountInfoResponse>= client.request(req: acctInfo)letresult= response.result
print(result)
// {
// "Account": "rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
// "Balance": "1000000000",
// "Flags": 0,
// "LedgerEntryType": "AccountRoot",
// "OwnerCount": 0,
// "PreviousTxnID": "73CD4A37537A992270AAC8472F6681F44E400CBDE04EC8983C34B519F56AB107",
// "PreviousTxnLgrSeq": 16233962,
// "Sequence": 16233962,
// "index": "FD66EC588B52712DCE74831DCB08B24157DC3198C29A0116AA64D310A58512D7"
// }

Contributors

Installation and supported versions

Swift Package Manager

You can use The Swift Package Manager to install XRPLSwift by adding it to your Package.swift file:

// swift-tools-version:5.7
import PackageDescription
letpackage=Package(
name:"YOUR_PROJECT_NAME",
dependencies:[.package(url:"https://github.com/Transia-RnD/XRPLSwift.git", from:"1.0.0"),])

Linux Compatibility

One of the goals of this library is to provide cross-platform support for Linux and support server-side Swift, however some features may only be available in iOS/macOS due to a lack of Linux supported libraries (ex. WebSockets). A test_linux.sh file is included that will run tests in a docker container. All contributions must compile on Linux.

The library supports Swift 5.7.1 and later.

Supported VersionsPlatformsCompatible

Features

Use XRPLSwift to build Swift applications that leverage the XRP Ledger. The library helps with all aspects of interacting with the XRP Ledger, including:

  • Key and wallet management
  • Serialization
  • Transaction Signing

XRPLSwift also provides:

  • A network client — See XrplClient for more information.
  • Methods for inspecting accounts — See XRPL Account Methods for more information.
  • Codecs for encoding and decoding addresses and other objects — See Core Codecs for more information.

See the complete XRPLSwift reference documentation on Read the Docs.

Usage

The following sections describe some of the most commonly used modules in the XRPLSwift library and provide sample code.

Network client

Use the XrplClient library to create a network client for connecting to the XRP Ledger.

leturl:String="wss://s1.ripple.com"letclient:XrplClient=try?XrplClient(server: url)

Manage keys and wallets

Wallet

Use the Wallet module to create a wallet from a given seed or or via a Testnet faucet.

To create a wallet from a seed (in this case, the value generated using Keypairs):

letwalletFromSeed:Wallet=Wallet.Wallet(seed: seed)print(walletFromSeed)
// publicKey: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0
// privateKey: -HIDDEN-
// classicAddress: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6

To create a wallet from a Testnet faucet:

lettestWallet:Wallet=fundWallet(client: client)lettestAccount:String= testWallet.classicAddress
print("Classic address: \(testAccount)")
// Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw

Keypairs

Use the Keypairs module to generate seeds and derive keypairs and addresses from those seed values.

Here's an example of how to generate a seed value and derive an XRP Ledger "classic" address from that seed.

letseed:String= keypairs.generateSeed()let(public, private)=Keypairs.deriveKeypair(seed: seed)lettestAccount:String=Keypairs.deriveClassicAddress(publicKey: public)print("Here's the public key: \(public)")print("Here's the private key: \(private)")print("Store this in a secure place!")
// Here's the public key: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// Here's the private key: EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD
// Store this in a secure place!

Note: You can use Keypairs.sign to sign transactions but XRPLSwift also provides explicit methods for safely signing and submitting transactions. See Transaction Signing and XRPL Transaction Methods for more information.

Subscribe to ledger updates

You can send subscribe and unsubscribe requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared.

url ="wss://s.altnet.rippletest.net/"
req =Subscribe(streams=[StreamParameter.LEDGER])
// NOTE: this code will run forever without a timeout, until the process is killed
with WebsocketClient(url)asclient:
client.send(req)
for message in client:
print(message)
// {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'}

Encode addresses

Use AddressCodec to encode and decode addresses into and from the "classic" and X-address formats.

// convert classic address to x-address
testnetXAddress =tryAddressCodec.classicAddressToXaddress(
classicAddress:"rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz",
tag:0,
isTest:true)print(testnetXAddress)
// T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps

Contributing

If you want to contribute to this project, see CONTRIBUTING.md.

Mailing Lists

We have a low-traffic mailing list for announcements of new XRPLSwift releases. (About 1 email per week)

If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

Report an issue

Experienced an issue? Report it here.

License

The XRPLSwift library is licensed under the ISC License. See LICENSE for more information.

About

A Swift/Linux library to interact with the XRP Ledger (XRPL) blockchain

Topics

Resources

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

THIS REPOSITORY IS NOT FINISHED. README IS NOT UP TO DATE. EXPECT DRAGONS. SEE TESTS FOR CURRENT IMPLEMENTATIONS.

XRPLSwift

A pure Swift implementation for interacting with the XRP Ledger, the XRPLSwift library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing, by providing native Swift methods and models for XRP Ledger transactions and core server API (rippled) objects.

// create a network client
letclient=tryXrplClient(server:"https://s.altnet.rippletest.net:51234/")
// create a wallet on the testnet
lettestWallet:Wallet= client.fundWallet()print(testWallet)
// publicKey: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// privateKey: -HIDDEN-
// classicAddress: rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo
// look up account info
letacctInfo:AccountInfo=AccountInfo(
account:"rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
ledgerIndex:"current",
queue:true,
strict:true,)letresponse:BaseResponse<AccountInfoResponse>= client.request(req: acctInfo)letresult= response.result
print(result)
// {
// "Account": "rBtXmAdEYcno9LWRnAGfT9qBxCeDvuVRZo",
// "Balance": "1000000000",
// "Flags": 0,
// "LedgerEntryType": "AccountRoot",
// "OwnerCount": 0,
// "PreviousTxnID": "73CD4A37537A992270AAC8472F6681F44E400CBDE04EC8983C34B519F56AB107",
// "PreviousTxnLgrSeq": 16233962,
// "Sequence": 16233962,
// "index": "FD66EC588B52712DCE74831DCB08B24157DC3198C29A0116AA64D310A58512D7"
// }

Contributors

Installation and supported versions

Swift Package Manager

You can use The Swift Package Manager to install XRPLSwift by adding it to your Package.swift file:

// swift-tools-version:5.7
import PackageDescription
letpackage=Package(
name:"YOUR_PROJECT_NAME",
dependencies:[.package(url:"https://github.com/Transia-RnD/XRPLSwift.git", from:"1.0.0"),])

Linux Compatibility

One of the goals of this library is to provide cross-platform support for Linux and support server-side Swift, however some features may only be available in iOS/macOS due to a lack of Linux supported libraries (ex. WebSockets). A test_linux.sh file is included that will run tests in a docker container. All contributions must compile on Linux.

The library supports Swift 5.7.1 and later.

Supported VersionsPlatformsCompatible

Features

Use XRPLSwift to build Swift applications that leverage the XRP Ledger. The library helps with all aspects of interacting with the XRP Ledger, including:

  • Key and wallet management
  • Serialization
  • Transaction Signing

XRPLSwift also provides:

  • A network client — See XrplClient for more information.
  • Methods for inspecting accounts — See XRPL Account Methods for more information.
  • Codecs for encoding and decoding addresses and other objects — See Core Codecs for more information.

See the complete XRPLSwift reference documentation on Read the Docs.

Usage

The following sections describe some of the most commonly used modules in the XRPLSwift library and provide sample code.

Network client

Use the XrplClient library to create a network client for connecting to the XRP Ledger.

leturl:String="wss://s1.ripple.com"letclient:XrplClient=try?XrplClient(server: url)

Manage keys and wallets

Wallet

Use the Wallet module to create a wallet from a given seed or or via a Testnet faucet.

To create a wallet from a seed (in this case, the value generated using Keypairs):

letwalletFromSeed:Wallet=Wallet.Wallet(seed: seed)print(walletFromSeed)
// publicKey: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0
// privateKey: -HIDDEN-
// classicAddress: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6

To create a wallet from a Testnet faucet:

lettestWallet:Wallet=fundWallet(client: client)lettestAccount:String= testWallet.classicAddress
print("Classic address: \(testAccount)")
// Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw

Keypairs

Use the Keypairs module to generate seeds and derive keypairs and addresses from those seed values.

Here's an example of how to generate a seed value and derive an XRP Ledger "classic" address from that seed.

letseed:String= keypairs.generateSeed()let(public, private)=Keypairs.deriveKeypair(seed: seed)lettestAccount:String=Keypairs.deriveClassicAddress(publicKey: public)print("Here's the public key: \(public)")print("Here's the private key: \(private)")print("Store this in a secure place!")
// Here's the public key: ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56
// Here's the private key: EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD
// Store this in a secure place!

Note: You can use Keypairs.sign to sign transactions but XRPLSwift also provides explicit methods for safely signing and submitting transactions. See Transaction Signing and XRPL Transaction Methods for more information.

Subscribe to ledger updates

You can send subscribe and unsubscribe requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared.

url ="wss://s.altnet.rippletest.net/"
req =Subscribe(streams=[StreamParameter.LEDGER])
// NOTE: this code will run forever without a timeout, until the process is killed
with WebsocketClient(url)asclient:
client.send(req)
for message in client:
print(message)
// {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'}
// {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'}

Encode addresses

Use AddressCodec to encode and decode addresses into and from the "classic" and X-address formats.

// convert classic address to x-address
testnetXAddress =tryAddressCodec.classicAddressToXaddress(
classicAddress:"rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz",
tag:0,
isTest:true)print(testnetXAddress)
// T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps

Contributing

If you want to contribute to this project, see CONTRIBUTING.md.

Mailing Lists

We have a low-traffic mailing list for announcements of new XRPLSwift releases. (About 1 email per week)

If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

Report an issue

Experienced an issue? Report it here.

License

The XRPLSwift library is licensed under the ISC License. See LICENSE for more information.

About

A Swift/Linux library to interact with the XRP Ledger (XRPL) blockchain

Topics

Resources

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages