{"id":51570425,"url":"https://github.com/boopi7/cardano-swift","last_synced_at":"2026-07-10T19:01:59.339Z","repository":{"id":324720602,"uuid":"1088067738","full_name":"Boopi7/cardano-swift","owner":"Boopi7","description":"Swift implementation of Cardano Data Types","archived":false,"fork":false,"pushed_at":"2025-11-02T09:34:15.000Z","size":1430,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-17T20:51:44.075Z","etag":null,"topics":["blockchain","cardano","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Boopi7.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-02T09:34:15.000Z","updated_at":"2025-11-02T09:08:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Boopi7/cardano-swift","commit_stats":null,"previous_names":["dravynn/cardano-swift","boopi7/cardano-swift"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Boopi7/cardano-swift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Boopi7%2Fcardano-swift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Boopi7%2Fcardano-swift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Boopi7%2Fcardano-swift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Boopi7%2Fcardano-swift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Boopi7","download_url":"https://codeload.github.com/Boopi7/cardano-swift/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Boopi7%2Fcardano-swift/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35339931,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","cardano","swift"],"created_at":"2026-07-10T19:01:57.284Z","updated_at":"2026-07-10T19:01:59.324Z","avatar_url":"https://github.com/Boopi7.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GitHub Workflow Status](https://github.com/devnova777/swift-cardano-core/actions/workflows/swift.yml/badge.svg)\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2FKingpin-Apps%2Fswift-cardano-core%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/Kingpin-Apps/swift-cardano-core)\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2FKingpin-Apps%2Fswift-cardano-core%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/Kingpin-Apps/swift-cardano-core)\n\n# SwiftCardanoCore - Swift implementation of Cardano Data Types\n\nSwiftCardanoCore is a Swift implementation of Cardano Data Types with CBOR (and JSON) serialization.\n\n## Installation\n\n### Swift Package Manager\n\nTo add SwiftCardanoCore as dependency to your Xcode project:\n\n1. In Xcode, select `File` \u003e `Add Package Dependencies`\n2. Enter the repository URL: `https://github.com/Kingpin-Apps/swift-cardano-core.git`\n3. Click `Add Package` and import `SwiftCardanoCore`\n\nOr add it to your `Package.swift` file:\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/Kingpin-Apps/swift-cardano-core.git\", from: \"1.0.0\")\n]\n```\n\n## Data Types\n- [x] Addresses\n- [x] Certificate\n- [x] Config Files\n- [x] Governance\n- [x] Keys\n- [x] Metadata\n- [x] Native Scripts\n- [x] Parameters\n- [x] Plutus\n- [x] Stake Pools\n- [x] Transactions\n- [x] Credentials\n- [x] Hashing\n- [x] Network\n- [x] Signatures\n- [x] And more...\n\n\n## Usage\n\n### Key Management\n\n#### Generating Keys\n\n```swift\nimport SwiftCardanoCore\n\n// Generate individual keys\nlet paymentSKey = try PaymentSigningKey.generate()\nlet paymentVKey = try PaymentVerificationKey.fromSigningKey(paymentSKey)\n\nlet stakeSKey = try StakeSigningKey.generate()\nlet stakeVKey = try StakeVerificationKey.fromSigningKey(stakeSKey)\n\n// Or use KeyPair convenience classes\nlet paymentKeyPair = try PaymentKeyPair.generate()\nlet stakeKeyPair = try StakeKeyPair.generate()\n```\n\n#### Saving and Loading Keys\n\n```swift\n// Save keys to files\ntry paymentKeyPair.signingKey.save(to: \"payment.skey\")\ntry paymentKeyPair.verificationKey.save(to: \"payment.vkey\")\ntry stakeKeyPair.signingKey.save(to: \"stake.skey\")\ntry stakeKeyPair.verificationKey.save(to: \"stake.vkey\")\n\n// Load keys from files\nlet loadedPaymentSKey = try PaymentSigningKey.load(from: \"payment.skey\")\nlet loadedStakeVKey = try StakeVerificationKey.load(from: \"stake.vkey\")\n```\n\n### Address Creation\n\n#### Base Addresses (Payment + Stake)\n\n```swift\n// Create a base address from keys\nlet address = try Address(\n    paymentPart: .verificationKeyHash(try paymentVKey.hash()),\n    stakePart: .verificationKeyHash(try stakeVKey.hash()),\n    network: .testnet\n)\n\n// Save address to file\ntry address.save(to: \"base.addr\")\n\n// Parse address from string\nlet parsedAddress = try Address(from: \"addr_test1vr2p8st5t5cxqglyjky7vk98k7jtfhdpvhl4e97cezuhn0cqcexl7\")\n```\n\n#### Enterprise Addresses (Payment Only)\n\n```swift\nlet enterpriseAddress = try Address(\n    paymentPart: .verificationKeyHash(try paymentVKey.hash()),\n    network: .mainnet\n)\n```\n\n#### Stake Addresses\n\n```swift\nlet stakeAddress = try Address(\n    stakingPart: .verificationKeyHash(try stakeVKey.hash()),\n    network: .testnet\n)\n```\n\n### Transaction Building\n\n#### Basic Transaction\n\n```swift\n// Create transaction inputs\nlet txId = try TransactionId(from: .string(\"732bfd67e66be8e8288349fcaaa2294973ef6271cc189a239bb431275401b8e5\"))\nlet txInput = TransactionInput(transactionId: txId, index: 0)\n\n// Create transaction outputs\nlet recipientAddress = try Address(from: \"addr_test1vrm9x2zsux7va6w892g38tvchnzahvcd9tykqf3ygnmwtaqyfg52x\")\nlet amount = Value(coin: 1_000_000) // 1 ADA\nlet txOutput = TransactionOutput(address: recipientAddress, amount: amount)\n\n// Create transaction body\nlet txBody = TransactionBody(\n    inputs: .orderedSet(try OrderedSet([txInput])),\n    outputs: [txOutput],\n    fee: Coin(200_000) // 0.2 ADA\n)\n\n// Create witness\nlet signature = try paymentSKey.sign(data: txBody.hash())\nlet witness = VerificationKeyWitness(\n    vkey: .verificationKey(VerificationKey(\n        payload: paymentVKey.payload,\n        type: paymentVKey.type,\n        description: paymentVKey.description\n    )),\n    signature: signature\n)\n\n// Create complete transaction\nlet witnessSet = TransactionWitnessSet(\n    vkeyWitnesses: .nonEmptyOrderedSet(NonEmptyOrderedSet([witness])),\n    nativeScripts: nil,\n    bootstrapWitness: nil,\n    plutusV1Script: nil,\n    plutusV2Script: nil,\n    plutusData: nil,\n    redeemers: nil\n)\n\nlet transaction = Transaction(\n    transactionBody: txBody,\n    transactionWitnessSet: witnessSet\n)\n```\n\n### Working with Native Assets\n\n```swift\n// Create multi-asset value\nlet policyId = try ScriptHash(from: .string(\"d5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cc\"))\nlet assetName = AssetName(from: \"MyToken\")\n\nlet asset = Asset([assetName: 1000])\nlet multiAsset = MultiAsset([policyId: asset])\nlet valueWithAssets = Value(coin: 2_000_000, multiAsset: multiAsset)\n\nlet outputWithAssets = TransactionOutput(address: recipientAddress, amount: valueWithAssets)\n```\n\n### Scripts\n\n#### Native Scripts\n\n```swift\n// Signature script\nlet keyHash = try paymentVKey.hash()\nlet sigScript = NativeScript.scriptPubkey(.verificationKeyHash(keyHash))\n\n// Time lock script (valid after slot 1000)\nlet timeLockScript = NativeScript.scriptInvalidBefore(1000)\n\n// Multi-signature script (2 of 3)\nlet keyHash1 = try paymentVKey.hash()\nlet keyHash2 = try stakeVKey.hash()\nlet keyHash3 = try PaymentVerificationKey.generate().hash()\n\nlet multiSigScript = NativeScript.scriptNOfK(\n    n: 2,\n    nativeScripts: [\n        .scriptPubkey(.verificationKeyHash(keyHash1)),\n        .scriptPubkey(.verificationKeyHash(keyHash2)),\n        .scriptPubkey(.verificationKeyHash(keyHash3))\n    ]\n)\n```\n\n#### Plutus Scripts\n\n```swift\n// Load Plutus script from compiled code\nlet scriptData = Data(hex: \"590a4d590a4a01000032323232323232323232...\")\nlet plutusV2Script = PlutusV2Script(data: scriptData)\n\n// Calculate script hash\nlet scriptHash = try plutusScriptHash(script: .plutusV2Script(plutusV2Script))\n```\n\n### CBOR Serialization\n\n```swift\n// Serialize to CBOR\nlet cborData = try transaction.toCBORData()\nlet cborHex = try transaction.toCBORHex()\n\n// Deserialize from CBOR\nlet restoredTransaction = try Transaction.fromCBOR(data: cborData)\nlet transactionFromHex = try Transaction.fromCBOR(hex: cborHex)\n```\n\n### Certificates\n\n#### Stake Registration\n\n```swift\nlet stakeCredential = Credential.verificationKeyHash(try stakeVKey.hash())\nlet stakeRegistration = StakeRegistrationCertificate(\n    stakeCredential: stakeCredential,\n    coin: Coin(2_000_000) // Deposit\n)\nlet regCert = Certificate.stakeRegistration(stakeRegistration)\n```\n\n#### Stake Delegation\n\n```swift\nlet poolOperator = try PoolOperator(from: \"pool1pu5jlj4q9w9jlxeu370a3c9myx47md5j5m2str0naunn2q3lkdy\")\nlet delegation = StakeDelegationCertificate(\n    stakeCredential: stakeCredential,\n    poolKeyHash: poolOperator.poolKeyHash\n)\nlet delegCert = Certificate.stakeDelegation(delegation)\n```\n\n### Metadata and Auxiliary Data\n\n```swift\n// Create transaction metadata\nlet metadata = Metadata([\n    1: .text(\"Hello Cardano!\"),\n    2: .uint(42),\n    3: .list([.text(\"item1\"), .text(\"item2\")]),\n    4: .map([\n        .text(\"key1\"): .text(\"value1\"),\n        .text(\"key2\"): .uint(123)\n    ])\n])\n\n// Create auxiliary data with metadata\nlet auxiliaryData = try AuxiliaryData(data: .metadata(metadata))\n\n// Include in transaction\nlet transactionWithMetadata = Transaction(\n    transactionBody: txBody,\n    transactionWitnessSet: witnessSet,\n    valid: true,\n    auxiliaryData: auxiliaryData\n)\n```\n\n### Advanced Examples\n\n#### Working with UTxOs\n\n```swift\n// Query UTxOs (pseudo-code - actual implementation depends on your data source)\nstruct UTxO {\n    let txHash: String\n    let outputIndex: Int\n    let address: Address\n    let value: Value\n}\n\n// Select UTxOs for transaction\nfunc selectUTxOs(utxos: [UTxO], targetAmount: Coin) -\u003e [UTxO] {\n    var selected: [UTxO] = []\n    var total = Coin(0)\n    \n    for utxo in utxos {\n        selected.append(utxo)\n        total = total + utxo.value.coin\n        if total \u003e= targetAmount {\n            break\n        }\n    }\n    \n    return selected\n}\n```\n\n#### Minting Native Assets\n\n```swift\n// Create minting transaction\nlet mintAmount: Int64 = 1000\nlet mintAsset = Asset([assetName: mintAmount])\nlet mintValue = MultiAsset([policyId: mintAsset])\n\n// Add minting to transaction body\nlet txBodyWithMint = TransactionBody(\n    inputs: .orderedSet(try OrderedSet([txInput])),\n    outputs: [txOutput],\n    fee: Coin(200_000),\n    mint: mintValue\n)\n```\n\n### Error Handling\n\n```swift\ndo {\n    let address = try Address(from: \"invalid_address_string\")\n} catch CardanoCoreError.invalidArgument(let message) {\n    print(\"Invalid address: \\(message)\")\n} catch CardanoCoreError.deserializeError(let message) {\n    print(\"Deserialization failed: \\(message)\")\n} catch CardanoCoreError.encodingError(let message) {\n    print(\"Encoding failed: \\(message)\")\n} catch CardanoCoreError.typeError(let message) {\n    print(\"Type error: \\(message)\")\n} catch {\n    print(\"Unexpected error: \\(error)\")\n}\n```\n\n### Compatibility\n\n- **Cardano Node**: Compatible with latest Cardano node versions\n- **Era Support**: Byron, Shelley, Allegra, Mary, Alonzo, Babbage, Conway\n- **Swift Version**: Requires Swift 5.7 or later\n- **Platforms**: macOS 12.0+, iOS 15.0+, tvOS 15.0+, watchOS 8.0+\n\n### Contributing\n\nContributions are welcome! Please see our contributing guidelines and submit pull requests to the repository.\n\n### License\n\nThis project is licensed under the Apache 2.0 License - see the LICENSE file for details.\n\n\n## Data Types\n- [x] Addresses\n- [x] Certificate\n- [x] Config Files\n- [x] Governance\n- [x] Keys\n- [x] Metadata\n- [x] Native Scripts\n- [x] Parameters\n- [x] Plutus\n- [x] Stake Pools\n- [x] Transactions\n- [x] Credentials\n- [x] Hashing\n- [x] Network\n- [x] Signatures\n- [x] And more...\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboopi7%2Fcardano-swift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboopi7%2Fcardano-swift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboopi7%2Fcardano-swift/lists"}