{"id":13651363,"url":"https://github.com/greymass/swift-eosio","last_synced_at":"2025-04-22T22:31:08.021Z","repository":{"id":41863890,"uuid":"215881128","full_name":"greymass/swift-eosio","owner":"greymass","description":"Library for swiftly working with EOSIO blockchains on Linux, macOS and iOS with ESR support","archived":false,"fork":false,"pushed_at":"2024-03-26T17:45:52.000Z","size":1032,"stargazers_count":16,"open_issues_count":1,"forks_count":17,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-12T22:15:57.187Z","etag":null,"topics":["eos-resources","eos-swift","eosio"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greymass.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2019-10-17T20:35:34.000Z","updated_at":"2024-10-26T10:14:40.000Z","dependencies_parsed_at":"2024-01-03T05:13:28.608Z","dependency_job_id":"925c056d-3c3a-4ca4-a0fc-4f6e2072052b","html_url":"https://github.com/greymass/swift-eosio","commit_stats":{"total_commits":177,"total_committers":3,"mean_commits":59.0,"dds":0.03389830508474578,"last_synced_commit":"3706c1d67c41b1c9182576757c4559fa7ea583fa"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greymass%2Fswift-eosio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greymass%2Fswift-eosio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greymass%2Fswift-eosio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greymass%2Fswift-eosio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greymass","download_url":"https://codeload.github.com/greymass/swift-eosio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250333914,"owners_count":21413475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["eos-resources","eos-swift","eosio"],"created_at":"2024-08-02T02:00:48.584Z","updated_at":"2025-04-22T22:31:07.670Z","avatar_url":"https://github.com/greymass.png","language":"Swift","funding_links":[],"categories":["Developers","Developer Resources"],"sub_categories":["Libraries and Frameworks","Languages"],"readme":"EOSIO for Swift\n===============\n\nLibrary for swiftly working with EOSIO blockchains on MacOS, Linux and iOS.\n\nFeatures:\n - Strongly typed EOSIO ABI encoding and decoding using Swift's `Codable` protocol\n - Untyped EOSIO ABI coding using EOSIO ABI definitions (JSON \u0026 binary)\n - Extendable HTTP API Client\n - All EOSIO primitive types implemented in Swift with ergonomic interfaces (Asset, Name, PublicKey etc.)\n - Fast and battle-hardened ECDSA via libsecp256k1\n - Signing requests (ESR/EEP-7)\n\nInstallation\n------------\n\nIn your `Package.swift`'s dependencies:\n\n```swift\n.package(url: \"https://github.com/greymass/swift-eosio.git\", .branch(\"master\")),\n```\n\nUsage example\n-------------\n\n```swift\nimport EOSIO\nimport Foundation\n\nstruct MyAction: ABICodable, Equatable {\n    let message: String // most native types conform to ABICodable\n    let from: Name // all eosio builtins have their own type\n    let tip: Asset? // optionals just work\n    let extra: [MyAction] // so does complex types\n}\n\nlet action = MyAction(\n    message: \"hi mom\",\n    from: \"2goodgenes\", // most eosio types can be expressed by literals\n    tip: \"3.00 BUCKZ\",\n    extra: [\n        MyAction(message: \"yup\", from: \"me\", tip: nil, extra: [])\n    ]\n)\n\n// types have same memory layout as their c++ eosio counterparts\nprint(action.from.rawValue) // 1380710289163812864\nprint(action.tip!.symbol) // 2,BUCKZ\nprint(action.tip!.units) // 300\n\n// types conform to standrad protocols where applicable\nprint(action.from == \"2goodgenes\") // true\nprint(action.tip! * 10) // \"30.00 BUCKZ\"\nprint(action.tip! + \"0.99 BUCKZ\") // \"3.99 BUCKZ\"\nprint(Name(String(action.from).replacingOccurrences(of: \"good\", with: \"BÅÅD\"))) // 2....genes\n\n// encode action to json\nlet jsonEncoder = JSONEncoder()\njsonEncoder.outputFormatting = .prettyPrinted\nlet jsonData = try! jsonEncoder.encode(action)\nprint(String(bytes: jsonData, encoding: .utf8)!)\n/*\n {\n   \"extra\" : [\n     {\n       \"message\" : \"yup\",\n       \"extra\" : [\n\n       ],\n       \"from\" : \"me\"\n     }\n   ],\n   \"message\" : \"hi mom\",\n   \"tip\" : \"3.00 BUCKZ\",\n   \"from\" : \"2goodgenes\"\n }\n */\n\n// encode action to binary\nlet abiEncoder = ABIEncoder()\nlet binData: Data = try! abiEncoder.encode(action)\nprint(binData.hexEncodedString())\n// 066869206d6f6d00005653b1442913012c01000000000000024255434b5a0000010379757000000000000080920000\n\n// decoding actions\nlet abiDecoder = ABIDecoder() // same for JSONDecoder\nlet decodedAction = try! abiDecoder.decode(MyAction.self, from: binData)\nprint(decodedAction == action) // true\n\n// untypepd coding using ABI definitions\nlet myAbiJson = \"\"\"\n{\n    \"version\": \"eosio::abi/1.1\",\n    \"structs\": [\n        {\n            \"name\": \"my_action\",\n            \"base\": \"\",\n            \"fields\": [\n                {\"name\": \"message\", \"type\": \"string\"},\n                {\"name\": \"from\", \"type\": \"name\"},\n                {\"name\": \"tip\", \"type\": \"asset?\"},\n                {\"name\": \"extra\", \"type\": \"my_action[]\"}\n            ]\n        }\n    ]\n}\n\"\"\"\nlet jsonDecoder = JSONDecoder()\n// ABI defs are also ABICodable\nlet abi = try! jsonDecoder.decode(ABI.self, from: myAbiJson.data(using: .utf8)!)\nprint(abi.resolveStruct(\"my_action\")!.map({ $0.name })) // [\"message\", \"from\", \"tip\", \"extra\"]\n\n// untyped decoding\nlet anyFromBin = (try! abiDecoder.decode(\"my_action\", from: binData, using: abi))\nlet anyFromJson = (try! jsonDecoder.decode(\"my_action\", from: jsonData, using: abi))\n\nlet objFromBin = anyFromBin as! [String: Any]\nlet objFromJson = anyFromJson as! [String: Any]\n\nprint(objFromJson[\"from\"] as! Name) // 2goodgenes\nprint(objFromJson[\"from\"] as? Name == objFromBin[\"from\"] as? Name) // true\nprint(objFromJson[\"from\"] as? Name == action.from) // true\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreymass%2Fswift-eosio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreymass%2Fswift-eosio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreymass%2Fswift-eosio/lists"}