At present, there are many blockchains, each competing with the others to gain market share and dominance. It is expected that multiple blockchains will continue to coexist in the future. In this blockchain universe, no single chain will rule them all, making the ability of those chains to communicate become essential. Particularly, as people utilize multiple blockchains and engage in cross-chain transactions, it becomes crucial to ensure their feasibility. This thesis explores methods for enabling cross-chain transactions, including the following key contributions: (1) proposing protocols for people to trade across multiple blockchains and protect participants’ financial interests if there exist uncooperative participants; (2) designing protocols for fault-tolerant cross-chain transactions such that even if some participants become uncooperative, the trade can still succeed; (3) providing protocols to trade cross-chain options; (4) automating the process of designing cross-chain protocols for cross-chain transactions.